我有这样的查询
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
然而,当我尝试这个时,我得到了
无法对包含的表达式执行聚合函数 聚合或子查询。
我最好的方法是什么?
答案 0 :(得分:3)
如错误消息中所述,您无法在Aggregate
Sub-Query
功能
这是正确的方法
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