2012-09-27 8 views
9

मैं अपने मामले बयान के अंदर कुछ गणना जोड़ने के लिए गतिशील रूप से एक नया स्तंभ की सामग्री बनाना चाहते हैं, लेकिन मैं त्रुटि मिलती है:एसक्यूएल सर्वर में एक मामला बयान के अंदर एक SUM() कैसे करना है

Column 'Test1.qrank' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

यह वह कोड है जिसे मैं

case 
    when test1.TotalType = 'Average' then Test2.avgscore 
    when test1.TotalType = 'PercentOfTot' then (cnt/SUM(test1.qrank)) 
    else cnt 
end as displayscore 

मैंने समूह करने का प्रयास किया लेकिन यह काम नहीं किया।

कोई संकेत?

+0

आपकी शेष क्वेरी क्या है। यदि आप ग्रुप बाय ... –

उत्तर

0

यदि आप SQL Server 2005 या ऊपर का उपयोग कर रहे हैं, तो आप विंडोिंग फ़ंक्शन SUM() OVER() का उपयोग कर सकते हैं।

case 
when test1.TotalType = 'Average' then Test2.avgscore 
when test1.TotalType = 'PercentOfTot' then (cnt/SUM(test1.qrank) over()) 
else cnt 
end as displayscore 

लेकिन यदि आप वास्तव में आवश्यक चीज़ों के संदर्भ में अपनी पूरी क्वेरी दिखाते हैं तो यह बेहतर होगा।

+0

'ओवर() 'एकाधिक' योग कॉलम 'और गलत परिणाम का उपयोग कर अनुपलब्ध हैं। –

1

आप पहले एसयूएम बनाने के लिए एक सामान्य टेबल अभिव्यक्ति का उपयोग कर सकते हैं, इसे तालिका में शामिल कर सकते हैं, और उसके बाद सीटीई या मूल तालिका से आवश्यक मूल्य प्राप्त करने के लिए WHEN का उपयोग कर सकते हैं।

WITH PercentageOfTotal (Id, Percentage) 
AS 
(
    SELECT Id, (cnt/SUM(AreaId)) FROM dbo.MyTable GROUP BY Id 
) 
SELECT 
    CASE 
     WHEN o.TotalType = 'Average' THEN r.avgscore 
     WHEN o.TotalType = 'PercentOfTot' THEN pt.Percentage 
     ELSE o.cnt 
    END AS [displayscore] 
FROM PercentageOfTotal pt 
    JOIN dbo.MyTable t ON pt.Id = t.Id 
21

त्रुटि जब आप का चयन में यह शामिल किए बिना बयान के आधार पर समूहित में एक खंड का उपयोग कर रहे आप भी हो सकता है पोस्ट।

उदाहरण

यह एक काम करता है!

 SELECT t.device, 
      SUM(case when transits.direction = 1 then 1 else 0 end) , 
      SUM(case when transits.direction = 0 then 1 else 0 end) from t1 t 
      where t.device in ('A','B') group by t.device 

यह नहीं एक (चुनिंदा से हटा दिया t.device)

 SELECT 
      SUM(case when transits.direction = 1 then 1 else 0 end) , 
      SUM(case when transits.direction = 0 then 1 else 0 end) from t1 t 
      where t.device in ('A','B') group by t.device 

यह शिकायत है कि मैं कुछ है कि चयन

में शामिल नहीं है के लिए समूहीकरण कर रहा हूँ अपने त्रुटि उत्पन्न करेगा कृपया, अधिक समर्थन प्राप्त करने के लिए सभी क्वेरी प्रदान करें।

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