Пример данных:
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
EDIT : Обновлены примеры данных и запросов, чтобы указать, что я группируюсь по двум столбцам, а не по одному.