SQL select行where(此列在另一列中有许多不同的值)

时间:2016-02-18 15:02:27

标签: sql sql-server

我想选择一些精确列具有不同值的行,而另一个精确列具有相同的值。

例如:

COLUMN_A  |  COLUMN_B
__________|___________
          |
1         |   2002
1         |   2002
2         |   2001
2         |   2007
3         |   2010
3         |   2010

现在,假设我想知道哪些行具有相同的A但不同的B,查询将返回行

2         |   2001
2         |   2007

或只是

2

只要我知道它是哪一个......

3 个答案:

答案 0 :(得分:3)

您可以使用:

SoundManager

另一种方法是使用SELECT COLUMN_A FROM dbo.YourTable GROUP BY COLUMN_A HAVING MIN(COLUMN_B) <> MAX(COLUMN_B);

EXISTS

答案 1 :(得分:3)

Count(不同 ColumnName )就是这种情况。它确保仅考虑唯一值。

With Src As (
    Select *
    From (Values
        (1, 2002),
        (1, 2002),
        (2, 2001),
        (2, 2007),
        (3, 2010),
        (3, 2010)
    ) V (COLUMN_A, COLUMN_B)
)
Select *
From Src
Where COLUMN_A In (
    Select COLUMN_A
    From Src
    Group By COLUMN_A
    Having Count(Distinct COLUMN_B) > 1 --<- "More than one unique value" condition
    )
COLUMN_A    COLUMN_B
       2        2001
       2        2007

答案 2 :(得分:2)

这个没有GROUPing:

SELECT x.column_a, x.column_b, y.column_b
  FROM table_name x
  JOIN table_name y
    ON ( x.column_a = y.column_a AND x.column_b <> y.column_b )

您只需将表格加入到自身,并提供您正在寻找的条件。