我在SQL Server 2008的数据库中有两个表,两个表都有20列。首先将数据插入到表A中,然后在表B中重新输入相同的数据。现在我想检查一下有什么区别两个表之间的数据和差异输出可以是百分比数字,表示两个表之间的数据差异。下面我分享我的数据库的图片。有些数据是数字的,数据类型为float,有些是text,数据类型为varchar。以下是我的数据库的一些快照。
现在我想知道我的问题是否有任何解决方案足够快,以便我可以计算两个表之间的差异。请注意,差异应该是逐列。
任何教程都说明了c#的任何算法都存在这样的问题。如果有任何SQL查询可以解决我的问题,而无需进入任何其他平台就可以了。
答案 0 :(得分:0)
如果你想找出每个表的非匹配记录的百分比,那么我们可以尝试使用完整的外连接:
SELECT
100.0 * COUNT(CASE WHEN b.col1 IS NULL THEN 1 END) /
COUNT(a.col1) AS pct_a_missing,
100.0 * COUNT(CASE WHEN a.col1 IS NULL THEN 1 END) /
COUNT(b.col1) AS pct_b_missing
FROM tableA a
FULL OUTER JOIN tableB b
ON a.col1 = b.col1 AND
a.col2 = b.col2 -- and all other columns
按照以下链接进行简短演示,以显示上述查询逻辑的工作原理。
我们也可以在这里使用EXCEPT
运算符。例如,要查找表A中与tableB中的任何内容不匹配的行的百分比,我们可以使用:
SELECT
100.0 * (SELECT COUNT(*) FROM
(SELECT * FROM tableA EXCEPT SELECT * FROM tableB) t) /
(SELECT COUNT(*) FROM tableA) AS pct_a_missing;