2016-02-25 59 views
6

我有这样如何在包含聚合或子查询的表达式上执行聚合函数?

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

查询我不喜欢IDS的硬编码的名单,我有一个简单的查询,将让我什么,我想

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 

然而,当我尝试这我得到

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

我最好的未来之路是什么?

回答

3

为错误消息指出您不能使用对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 
相关问题