2013-02-04 14 views
6

से अलग-अलग मानों के साथ एक ही कॉलम पर एकाधिक COUNT एक कॉलम में किसी विशेष मान की गणना करने के लिए मैं सही SQL वाक्यविन्यास के साथ संघर्ष कर रहा हूं।एसक्यूएल क्वेरी - नेस्टेड SELECT क्वेरी

इस क्वेरी काम करता है (शायद गलत वाक्यविन्यास, लेकिन एसक्यूएल सर्वर 2008 खुश लगता है)

SELECT StudentID, count(UnApproved)as Late, count(Unapproved) as Absent from results 
WHERE unapproved=1 and StudentID in 
    (
    SELECT studentid FROM [Results] 
    WHERE StudentYearLevel='10' and Date > 20130101) group by StudentID 
) 
बेशक

, दोनों Late और Absent कॉलम क्योंकि जहां 'जहां' है की एक ही मान।

तो यह क्या कर रहा है (दाएं से) "वर्ष 10" के सदस्य होने वाले छात्रों की आईडी निर्धारित करना।

फिर, प्रत्येक छात्र आईडी लौटने के लिए, मुझे अस्वीकृत अनुपस्थिति की गिनती वापस करने की आवश्यकता है जहां अस्वीकृत अनुपस्थिति का प्रकार 1 है और अगले कॉलम में, अस्वीकृत अनुपस्थितियों की गिनती भी वापस करें जहां टाइप 2 है।

अगर मैं ऐसा जैसी क्वेरी सबमिट करने का प्रयास: -

SELECT StudentID, count(UnApproved)as Late where unapproved=2, count(Unapproved) as Absent from results 
where unapproved=1 and StudentID in 
    (
    SELECT studentid FROM [Results] where StudentYearLevel='10' and Date > 20130101 
) 
group by StudentID 

एसक्यूएल सर्वर यह दरारें, और लाल रंग में लगभग पूरे क्वेरी रेखांकित करता है।

मैं इन तीन स्तंभों खत्म करने की जरूरत है: -

StudentID | Late | Absent

और उचित मायने रखता है के साथ छात्र आईडी वाले तीन कॉलम।

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

उत्तर

21
SELECT StudentID, 
SUM(case when Unapproved =1 then 1 else 0 end) as Late, 
SUM(case when Unapproved =2 then 1 else 0 end) as Absent 
from results where 
StudentID in (SELECT studentid FROM [Results] where StudentYearLevel='10' and Date > 20130101) 
group by StudentID 
संबंधित मुद्दे