サンプルデータ:
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' のグループを探していることに注意してください。同じテーブルで2つのクエリを結合することで実行できることを知っています.1つのクエリは、異なるタイプを持つすべてのグループを検索し、別のクエリはタイプ= '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
編集: 1 つだけでなく 2 つの列でグループ化していることを示すために、サンプル データとクエリを更新しました。