结果基于SQL Server中的列值

时间:2015-09-17 19:30:48

标签: sql sql-server self-join

这是在SQL Server中。表1有两列,Column1和Column2,Column1是复合键的一部分。 Column1可以与column2的多个值相关联。

这样的事情:

Column1 | Column2
---------------------
value1  | Value20
Value1  | Value21
Value1  | Value22

查询结果应该基于value1是否与value20相关联。 如果value1与value20关联,则应返回row2和row3,否则不返回任何内容。

我尝试自己加入桌子,但我无法得到我需要的最终结果。

SELECT * 
FROM TABLE1 T1
JOIN TABLE1 T2 ON T1.COLUMN1 = T2.COLUMN1
WHERE T1.COLUMN2 IN (VALUE20)
  AND T2.COLUMN2 IN (VALUE21, VALUE22); 

我不能在这里使用union,因为查询中涉及其他表以返回其他值。

1 个答案:

答案 0 :(得分:2)

WITH candidates AS (
SELECT Column1, Column2
  FROM Table1
  WHERE Column2 = 'Value20'
)
SELECT t.Column1, t.Column2
  FROM Table1 t
  JOIN candidates c ON (c.Column1 = t.Column1 AND t.Column2 <> 'Value20')