【发布时间】:2012-02-26 06:44:34
【问题描述】:
样本数据:
ID1 ID2 Num Type
---------------------
1 1 1 'A'
1 1 2 'A'
1 2 3 'A'
1 2 4 'A'
2 1 1 'A'
2 2 1 'B'
3 1 1 'A'
3 2 1 'A'
想要的结果:
ID1 ID2
---------
1 1
1 2
3 1
3 2
请注意,我是按 ID1 和 ID2 进行分组,而不是 Num,而且我正在专门寻找 Type = 'A' 的组。我知道通过在同一个表上连接两个查询是可行的:一个查询查找具有不同类型的所有组,另一个查询过滤 Type = 'A' 的行。但我想知道这是否可以以更有效的方式完成。
我使用的是 SQL Server 2008,我当前的查询是:
SELECT ID1, ID2
FROM (
SELECT ID1, ID2
FROM T
GROUP BY ID1, ID2
HAVING COUNT( DISTINCT Type ) = 1
) AS SingleType
INNER JOIN (
SELECT ID1, ID2
FROM T
WHERE Type = 'A'
GROUP BY ID1, ID2
) AS TypeA ON
TypeA.ID1 = SingleType.ID1 AND
TypeA.ID2 = SingleType.ID2
编辑:更新了示例数据和查询,以表明我正在对两列进行分组,而不仅仅是一列。
【问题讨论】:
-
您当前的查询是什么样的?
标签: sql sql-server sql-match-all