有没有办法比较SQL Server中的2列表

时间:2018-04-16 17:18:51

标签: sql sql-server excel

有人可以给我一个解决这个问题的想法吗?查找表中的2列具有相同的数据,我们不知道列是相同的。

我可以将部分数据移到excel中进行检查吗?

我有大约39行和2B行

enter image description here

  • Col1等于col3
  • col2等于col6
  • col4不等于col5

输出应仅显示常见的列或某些常见的

输出

空值正在困扰着我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您有39列,并希望每个列都进行评估,那么可以评估741列配对。这可以以简洁的方式做到但我不建议将其用于20亿行!

SELECT V1.name,
       V2.name
FROM   YourTable T WITH (TABLOCKX)
       CROSS APPLY (SELECT (SELECT T.*
                            FOR xml path('row'), elements, type)) CA(X)
       CROSS APPLY CA.X.nodes('/row/*') N1(n)
       CROSS APPLY CA.X.nodes('/row/*') N2(n)
       CROSS APPLY (VALUES(n1.n.value('local-name(.)', 'sysname'), n1.n.value('.', 'nvarchar(4000)') )) V1(name, val)
       CROSS APPLY (VALUES(n2.n.value('local-name(.)', 'sysname'), n2.n.value('.', 'nvarchar(4000)') )) V2(name, val)
WHERE  V2.name < V1.name
       AND V1.val = V2.val
GROUP  BY V1.name,
          V2.name
HAVING COUNT(*) = (SELECT COUNT(*)
                   FROM   YourTable) 

您应首先分析列中的值。获取所有列的MINMAXCOUNT(对于数字列,也可能获得其他聚合数据)。放弃COUNT不等于整行数的任何列,因为这些列与您对NULLs所需处理的任何内容都不匹配,并标识具有相同MIN和{{的列的列数1}}进一步调查。

如果您对示例数据执行此操作,您会发现唯一值得调查的对是MAXCol1 <-> col3。因此,您可以进行更集中的查询,以确定是否确实如此。

Col2 <-> col6