2016-02-25 33 views
6

Tôi có một câu hỏi như thế nàyLàm cách nào để tôi có thể thực hiện chức năng tổng hợp trên một biểu thức có chứa tổng hợp hoặc truy vấn phụ?

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

tôi không thích danh sách mã hóa cứng của id và tôi có một truy vấn đơn giản mà sẽ làm cho tôi những gì tôi muốn

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 

Tuy nhiên khi tôi cố gắng này Tôi nhận được

Không thể thực hiện chức năng tổng hợp trên biểu thức có chứa tổng hợp hoặc truy vấn phụ.

Cách tốt nhất của tôi là gì?

Trả lời

3

Như đã nêu trong thông báo lỗi bạn không thể sử dụng chức năng Aggregate trên đầu trang của Sub-Query

Dưới đây là cách chính xác để làm điều đó

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 

Một cách khác sẽ được sử dụng 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 
Các vấn đề liên quan