如何对包含聚合或子查询的表达式执行聚合函数?

How can I perform an aggregate function on an expression containing an aggregate or a subquery?

我有这样的查询

SELECT Id
    ,sum(CASE 
            WHEN ErrorId NOT IN (                        
                    ,10                     
                    ,11                     
                    ,12
                    ,13
                    )
                THEN 1
            ELSE 0
            END) errorCount
FROM Table 
group by Id

我不喜欢硬编码的 ID 列表,我有一个简单的查询可以得到我想要的

SELECT Id
    ,sum(CASE 
            WHEN ErrorId NOT IN (
              select ErrorId from Errors where ErrorCategory =  'Ignore_Error'
                    )
                THEN 1
            ELSE 0
            END) errorCount
FROM Table 
group by Id

然而,当我尝试这个时,我得到了

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

我最好的前进方向是什么?

如错误消息中所述,您不能在 Sub-Query

之上使用 Aggregate 函数

这是正确的做法

SELECT t.Id,
       Count(e.ErrorId) errorCount
FROM   Table t
       LEFT JOIN Errors e
              ON t.ErrorId = e.ErrorId
                 AND e.ErrorCategory = 'Ignore_Error'
GROUP  BY t.Id 

另一种方法是使用 Outer Apply

SELECT t.Id,
       Count(ou.ErrorId) errorCount
FROM   Table t
       OUTER apply (SELECT e.ErrorId
                    FROM   Errors e
                    WHERE  t.ErrorId = e.ErrorId
                           AND e.ErrorCategory = 'Ignore_Error') ou
GROUP  BY t.id