2016-02-25 21 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 

की तरह एक प्रश्न मैं आईडी के हार्डकोडेड सूची पसंद नहीं है है और मैं एक साधारण क्वेरी है कि मुझे मिल जाएगा मैं

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 
का उपयोग किया जाएगा है
संबंधित मुद्दे

 संबंधित मुद्दे