2013-02-04 63 views
6

我用正確的SQL語法奮力一列返回一個特定值的計數不同的值相同的列多COUNT。SQL查詢 - 與來自嵌套SELECT查詢

此查詢的工作(可能是不正確的語法,但SQL Server 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 
) 

當然,無論LateAbsent列返回,因爲那裏的「其中」是相同的值。

那麼這是什麼做的是(右)確定學生誰是「10年」的成員的ID。

然後,對於每個返回的學生ID,我需要它返回未批准的缺席類型記錄在未接受的缺席類型爲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 

SQL Server的裂縫它,並以紅色突出了幾乎整個查詢。

我要結束這三根柱子: -

StudentID | Late | Absent

而且具有適當的計數學生ID三列。

我能做的最基本的選擇查詢,但是當涉及到嵌套查詢,工會,加入,內部件我出我的深度。非常感激任何的幫助。絕不是我相信我的(工作)查詢以任何方式結構正確,「怎麼我在這一個黑客。

回答

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