如何查找具有两列相同但一列不同的行?

时间:2013-06-05 12:21:56

标签: sql sql-server

我有一个数据库,其中有许多不同的表连接在一起以创建下表:

Col1   Col2    Col3           Col4
51     1       1101    2009-01-24 00:00:00.000
52     1       1101    2009-05-14 00:00:00.000
76     1       1101    2009-02-04 00:00:00.000
78     2       1101    2009-09-29 00:00:00.000
79     1       1101    2009-09-25 00:00:00.000
79     2       1101    2009-09-25 00:00:00.000
80     1       1101    2009-02-09 00:00:00.000
80     1       1101    2012-09-26 00:00:00.000
80     2       1101    2009-02-09 00:00:00.000
80     2       1101    2012-09-26 00:00:00.000

我基本上只想获得像79或80那样的行,其中至少有两行在Col1和Col3中是相同的但是Col2是不同的。

我是SQL的新手,所以我不知道这是否简单,我希望有人可以提供帮助。

由于

我希望只显示第1列和第3列中具有相同值但在第2列中有所不同的行,因此对于上面的实例,仅显示79和80的行。

2 个答案:

答案 0 :(得分:1)

使用group byhavingcount distinct的组合应返回您想要的内容

select col1, col3, count (distinct col2)
from yourtable
group by col1, col3
having count(distinct col2) >= 2

如果要显示完整的数据集,请将此结果集连接到原始数据源。

select t.* from yourtable t
    inner join
(
    select col1, col3
    from yourtable
    group by col1, col3
    having count(distinct col2) >= 2
) v
    on t.col1 = v.col1
    and t.col3 = v.col3

答案 1 :(得分:1)

最简单,因为您似乎只希望与显示的条件匹配的不同Col1值应该是;

SELECT DISTINCT Col1
FROM Table1
GROUP BY Col1,Col3
HAVING COUNT(DISTINCT Col2) > 1

An SQLfiddle to test with