2016-12-07 11 views
0

私はtable1とtable3の下にあります。 table2の 'Counts'フィールドは、table1とtable3のvaluessフィールドに基づいて更新する必要があります。つまり、23がtable1に4回、table3と45が1回表示されます。表2は、その数で更新する必要があります。最初の2つのテーブルのデータを使用して3番目のテーブルを更新するSP

TABLE1

Id | Data | Valuess 
1 | rfsd | 23 
2 | fghf | 45 
3 | rhhh | 23 

表3

Id | Data | Valuess 
1 | rfsd | 23 
2 | tfgy | 23 

table2の

Id | Fields | Counts 
1 | 23  | 4 
2 | 45  | 1 

私はこれを達成するには、以下のストアドプロシージャを使用しています。

WITH t13 AS (
SELECT Id, Data, Valuess FROM Table1 UNION ALL SELECT Id, Data, Valuess FROM Table3), 
cte AS (SELECT Valuess,COUNT(*) AS Count2 FROM t13 GROUP BY Valuess) 

UPDATE t2 
SET t2.Counts = cte.Count2 
FROM Table2 t2 JOIN cte ON t2.Fields = cte.Valuess; 

QUESTION

ではなく、上記テーブルデータ、iは、テーブルデータの下有する

....

TABLE1

Id | Data | Valuess 
1 | rfsd | 004561 
2 | fghf | 0045614 
3 | rhhh | adcwyx 

表3

Id | Data | Valuess 
1 | rfsd | 0045614 
2 | tfgy | 004561 

表2

Id | Fields | Counts 
1 | 0045614 | 4 
2 | adcwyxv | 1 

したがってここでは、table1とtable3のvaluessフィールドに英数字データがあります。また、我々は '004561'と '0045614'のようなデータを持っています

フィールドの7番目の要素を切り取り、テーブル3の7番目の要素を切り捨てて比較したいと思います。すなわち004561、004561とadcwyxは表1。 004561および004561は、表3から取得され、表2の004561およびadcwyxと比較されます(最初にtable2の7番目の要素を切り捨てて比較する必要があります)。

最終結果は表2に示すようになります。

+0

SQL Server!= MySQL。 – Barmar

+0

table1の値としての 'adcwyx'はどのようにtable2の' adcwyxv'になりますか? – SqlZim

+0

sqlzim - 2つの異なるデータ値であり、お互いに依存しません。 –

答えて

1

SUBSTRINGとする必要があります。

WITH t13 AS (
    SELECT Id, Data, SUBSTRING(Valuess,1,6) AS [Values] 
    FROM Table1 
    UNION ALL 
    SELECT Id, Data, SUBSTRING(Valuess,1,6) AS [Values] 
    FROM Table3 
) 
, cte AS (
    SELECT [Values],COUNT(*) AS Count2 
    FROM t13 GROUP BY [Values] 
) 
UPDATE t2 
SET t2.Counts = cte.Count2 
FROM Table2 t2 JOIN cte ON SUBSTRING(t2.Fields,1,6) = cte.[Values]; 
関連する問題