在多行中查找同一列中具有相同值的行,而另一列具有不同值

时间:2018-06-22 14:16:23

标签: sql sql-server group-by

抱歉,我无法在SQLFiddle上进行演示,因为当我问这个问题时,它似乎已失效。

我有下表

Col1        Col2     
====        ====     
1           A       
1           A       
1           B    
2           C
2           C

如果我通过

的查询运行分组
SELECT COL1,COL2
GROUPBY COL1,COL2

我会得到

Col1        Col2     
====        ====     
1           A            
1           B    
2           C

我的问题是,当我在第2列中有多个不同值时,如何编写查询以检测第1列的值?从本质上讲,该查询的返回值应该给我“ 1”,因为在多个数据行的范围内,行在Col1中具有相同的值,而Col2在行中具有不同的值。

3 个答案:

答案 0 :(得分:6)

您可以将group by子句与min()max()结合使用:

select col1
from table t
group by col1
having min(col2) <> max(col2);

答案 1 :(得分:5)

尝试一下:

select Col1,count(distinct Col2) as [different Col2 value count]
from yourtable
GROUP BY COL1
having count(distinct Col2)>1

答案 2 :(得分:0)

SELECT DISTINCT t1.Col1 
       FROM table t1 
            JOIN table t2 
                  ON T1.col1 = T2.col1 AND T1.col2 != T2.col2