[英]Subtraction in SQL - Cannot perform an aggregate function on an expression containing an aggregate or a subquery
[英]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.