2012-03-26 13 views
6

की सूची द्वारा समूह के लिए उपयोग की गई अभिव्यक्ति में कुल या सबक्वायरी का उपयोग नहीं कर सकता है नीचे दिए गए एसक्यूएल कथन में मुझे निम्न त्रुटि 'किसी अभिव्यक्ति में कुल या सबक्वायरी का उपयोग नहीं किया जा सकता है ग्रुप बाय क्लॉज की सूची द्वारा समूह। ' मैं इसके आसपास कैसे हो सकता हूं?समूह के लिए ग्रुप बाय क्लॉज

SELECT 
    T.Post, 
    COUNT(*) AS ClientCount, 
    Client = CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END 
FROM 
    MyTable T 
GROUP BY 
    T.Post, 
    CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END 

उत्तर

10

जब तक आप अपने GROUP BY में T.Client शामिल है, आप केवल एक समग्र समारोह के भीतर उस क्षेत्र में शामिल कर सकते हैं। आपके मामले में, उस फ़ील्ड द्वारा समूहित तर्क तर्क को बदलता है, इसलिए यह बाहर है (और CASE कथन द्वारा समूह के आपके प्रयास से संबंधित है)। इसके बजाय, एक समग्र फ़ंक्शन में T.Client लपेटें।

इस प्रकार आपके समूह अभी भी वही हैं, और जब आपके CASE कथन के परीक्षण के अनुसार केवल एक पंक्ति होती है, तो आप जानते हैं कि कुल funciton क्या परिणाम देगा।

SELECT 
    T.Post, 
    ClientCount = COUNT(*) AS ClientCount, 
    Client  = CASE COUNT(*) WHEN 1 THEN MAX(T.Client) ELSE '[Clients]' END 
FROM 
    MyTable T 
GROUP BY 
    T.Post 
2

आपको उस CASE अभिव्यक्ति द्वारा समूहबद्ध करने की आवश्यकता नहीं है।

SELECT 
    T.Post, 
    COUNT(*) AS ClientCount, 
    CASE COUNT(*) WHEN '1' THEN MIN(T.Client) ELSE '[Clients]' END Client 
FROM 
    MyTable T 
GROUP BY 
    T.Post 
+0

मुझे पूरा यकीन है कि समूह के हिस्से का हिस्सा नहीं होने के कारण 'टी क्लाइंट 'का संदर्भ मान्य नहीं होगा। उसे शायद उस कॉलम को एक सहसंबंधित उप-क्वेरी के माध्यम से परिभाषित करने की आवश्यकता होगी। –

+0

@ डैनियल आप सही हैं। मैंने उस हिस्से पर ध्यान नहीं दिया। फिक्स्ड। – Tomalak

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