0

我有一个包含一堆不同表的数据库,这些表连接在一起以创建下表:

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 的行。

4

2 回答 2

1

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

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

一个用于测试的 SQLfiddle

于 2013-06-05T12:54:12.957 回答
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
于 2013-06-05T12:30:58.650 回答