2017-11-20 13 views
1

sqlのキー 'id'を結合することに基づいて同じカラム名を持つ2つのテーブルを比較してカラム数を変更する方法。2つのテーブルをSQLのカラム名と比較してカラム数を計算する方法

Table 1 
id val1 val2 val3 val4 
1 a b c d 
2 d f k e 
4 r t y u 

Table 2 
id val1 val2 val3 val4 
1 a h c l 
2 d f k e 
4 g a w u 

count: 
id count 
1 2 
2 0 
4 3 

このカウント変数を最後に2番目のテーブルに追加し、前のテーブルから変更した値の数をこの値に設定します。

+0

を 'CTRL + K 'のtpフォーマットコード – TheGameiswar

答えて

3

を試してみてください。

DECLARE @Table1 TABLE (id INT, val1 VARCHAR(5), val2 VARCHAR(5), val3 VARCHAR(5), val4 VARCHAR(5)) 
INSERT INTO @Table1 VALUES 
(1,'a', 'b','c','d'), 
(2,'d', 'f','k','e'), 
(4,'r', 't','y','u') 

DECLARE @Table2 TABLE (id INT, val1 VARCHAR(5), val2 VARCHAR(5), val3 VARCHAR(5), val4 VARCHAR(5)) 
INSERT INTO @Table2 VALUES 
(1, 'a','h','c','l'), 
(2, 'd','f','k','e'), 
(4, 'g','a','w','u') 

SELECT T1.id, 
(CASE WHEN T1.val1 <> T2.val1 THEN 1 ELSE 0 END) 
+ (CASE WHEN T1.val2 <> T2.val2 THEN 1 ELSE 0 END) 
+ (CASE WHEN T1.val3 <> T2.val3 THEN 1 ELSE 0 END) 
+ (CASE WHEN T1.val4 <> T2.val4 THEN 1 ELSE 0 END) AS [count] 
FROM @Table1 T1 INNER JOIN @Table2 T2 
ON T1.id = T2.id 

か、UNPIVOT

SELECT T1.id, SUM (CASE WHEN T1.Val = T2.Val THEN 0 ELSE 1 END) [count] FROM 
(SELECT * FROM @Table1 UNPIVOT (Val FOR Col IN ([val1],[val2],[val3],[val4])) UNPVT) T1 
    INNER JOIN 
(SELECT * FROM @Table2 UNPIVOT (Val FOR Col IN ([val1],[val2],[val3],[val4])) UNPVT) T2 
ON T1.id = T2.id AND T1.Col = T2.Col 
GROUP BY T1.id 

結果使用することができます。

id count 
1 2 
2 0 
4 3 
+0

を使用してくださいありがとうございました。出来た。しかし、もし私が300などのような巨大な数を持っていたら、どうすればいいですか? –

+0

これを行うには 'UNPIVOT'を使うことができます。 –

+0

あなたのレスポンスがありがとうございます。各IDごとに変更された列名を取得する必要がある場合は、この既存のコードに追加する必要があります。 –

2

は、あなたがこれを使用することができ、この

SELECT t1.ID,SUM(CASE WHEN t1.VAL1 <> t2.Val1 THEN 1 ELSE 0 END + 
       CASE WHEN t1.VAL2 <> t2.Val2 THEN 1 ELSE 0 END + 
       CASE WHEN t1.VAL3 <> t2.Val3 THEN 1 ELSE 0 END + 
       CASE WHEN t1.VAL4 <> t2.Val4 THEN 1 ELSE 0 END) 
FROM Table1 t1 
INNER JOIN table2 t2 ON t1.ID=t2.ID 
GROUP BY t1.ID 
関連する問題