我有一个数据库,其中有许多不同的表连接在一起以创建下表:
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的行。
答案 0 :(得分:1)
使用group by
,having
和count 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