Образец данных:
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'. Я знаю, что это выполнимо с помощью объединения двух запросов к одной таблице: один запрос для поиска всех групп с различным типом и другой запрос для фильтрации строк с типом = '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: обновлен пример данных и запрос, чтобы указать, что я группирую по двум столбцам, а не только по одному.