SQL Server : CASE when any of 10 columns agree

标签 sql sql-server-2008 case

我在一个表中有 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/

相关文章:

sql - 如何识别重叠的数字范围?

SQL:为每个类别选择最近的日期

java - SQL Server + Spring JAVA 应用程序的奇怪性能问题

sql - T-sql根据子选择结果更新值

sql - 如何使用SQL中的casewhen和partitionby将多个值合并为一个值?

javascript - switch case 语句中的表达式

sql - SQL 时的大小写问题

sql - MySQL 获取行但更喜欢一个列值而不是另一个

java - jOOQ - 用于插入的多字段

c# - Dapper 存储过程的表值参数