如何通过在sql中加入键'id'来比较具有相同列名的两个表来计算更改的列数。
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
我希望这个count变量最后添加到第二个表中,并给出从前一个表到此更改的值的计数。
答案 0 :(得分: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
答案 1 :(得分: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