我在一个表中有 10 列(项目),在另一个表中有 10 列。
我想识别一个表中的任何一列/项目与另一表中的任何一列/项目匹配的情况。
我的下面的代码适用于三个项目,效率很低 - 如何修改它以适应 10 列/项目?
CASE
WHEN (t1.[item1] = t2.[item1] OR t1.[item1] = t2.[item2] OR t1.[item1] = t2.[item3])
OR (t1.[item2] = t2.[item2] OR t1.[item2] = t2.[item1] OR t1.[item2] = t2.[item3])
OR (t1.[item3] = t2.[item3] OR t1.[item3] = t2.[item1] OR t1.[item3] = t2.[item2])
THEN 1
ELSE 0
END AS [match]
最佳答案
我不知道这样是否更高效,但是写起来更简单:使用 IN 而不是相等测试。例如,
WHEN t1.item1 IN (T2.item1, T2.item2, T2.item3)
为了更有效的方法,(但更复杂的过程)使用 UNPIVOT 将每个列值转换为每个表的单独行。如果新表仅用于此过程,请在当前键列以及项目列上放置聚集索引。从这里,您可以执行 JOIN 来查找匹配值。
关于SQL Server : CASE when any of 10 columns agree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136199/