如何查找每组中所有行都具有特定列值的行组

kha*_*edh 0 sql sql-server sql-match-all

样本数据:

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'
Run Code Online (Sandbox Code Playgroud)

期望的结果:

ID1   ID2
---------
1     1
1     2
3     1
3     2
Run Code Online (Sandbox Code Playgroud)

请注意,我按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
Run Code Online (Sandbox Code Playgroud)

编辑:更新了示例数据和查询,以指示我正在分组两列,而不仅仅是一列.

Bas*_*nni 5

SELECT ID1, ID2
FROM MyTable
GROUP BY ID1, ID2
HAVING COUNT(Type) = SUM(CASE WHEN Type = 'A' THEN 1 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)