繁体   English   中英

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

[英]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

但是,当我尝试这个时,我得到了

无法对包含聚合或子查询的表达式执行聚合函数。

我最好的方法是什么?

如错误消息中所述,您不能在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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM