2013-05-10 138 views
0

所以我試圖讓具有條件(從查詢的其餘部分不同)的計數的總和獲取計數的總和與條件

這是我到目前爲止有:

SELECT studemo.ssid         AS [SSID], 
     stustat.graden        AS Grade, 
     studemo.lastname        AS [Last Name], 
     studemo.firstname       AS [First Name], 
     (SELECT Count(*) 
     WHERE attend.attendc IN ('E', 'G', 'H', 'I', 
            'J', 'L', 'M', 'P', 
            'Q', 'V', 'X')) AS [Days Absent], 
     attend.attendc        AS [Attendance Code], 
     attend.ddate         AS [Date] 
FROM track, 
     stustat, 
     stusched, 
     studemo, 
     attend 
WHERE studemo.suniq = stustat.suniq 
     AND attend.scduniq = stusched.scduniq 
     AND studemo.suniq = stusched.suniq 
     AND stustat.trkuniq = track.trkuniq 
     AND track.schoolc = '408' 
     AND track.schyear = '2013' 
     AND stustat.edate >= '08/21/2012' 
     AND stustat.xdate IS NULL 
ORDER BY [last name], 
      [first name], 
      attend.ddate 

這會給我正確的信息,只是不是我想要得到它的方式。它會給我一行每一個出席代碼。我希望能做的就是加總從count(*)子查詢中獲得某些東西的次數。我嘗試以大約100種不同的方式求和(),但我無法得到它。有什麼建議麼?

+1

展示樣品輸入和輸出數據...它很難理解從這裏... – 2013-05-10 18:08:39

+2

談隱加入 – Kermit 2013-05-10 18:09:53

+1

誰像這樣寫代碼? – 2013-05-10 18:14:38

回答

3

嘗試更換行:

(select count(*) where attend.attendc IN ('E','G','H','I','J','L','M','P','Q','V','X')) AS [Days Absent], 

與窗函數:

sum(case when attend.attendc IN ('E','G','H','I','J','L','M','P','Q','V','X') then 1 else 0 end) over() as [Days Absent] 

也就是說天缺席的總數。我猜你想要這個SSID。在這種情況下,使用partition by

sum(case when attend.attendc IN ('E','G','H','I','J','L','M','P','Q','V','X') then 1 else 0 end) 
      over (partition by SSID) as [Days Absent] 
+0

這對SSID的分區非常合適。非常感謝! – m0ngr31 2013-05-10 18:26:49