2014-09-25 135 views
0
------------------------------- 
StudentID| SubCode | Marks | 
------------------------------- 
B016124 | 112 |  89 |  
B016124 | 114 |  91 |  
B016124 | 116 |  99 |  
------------------------------- 
B016129 | 112 |  78 |  
B016129 | 114 |  88 |  
B016129 | 116 |  0 |  

輸出:與條件語句選擇

  SubCode=112 SubCode=114 SubCode=116 tot of 112+114 |Tot 112+114+116 
----------------------------------------------------------------------------------- 
StudentID | PractEx112 | PractEx114| TotalPract |ExamMrks116 | TotalMarks | 
----------------------------------------------------------------------------------- 
B016124 |  89 |  91 |  180  | 90  |  270  | 
----------------------------------------------------------------------------------- 
B016129 |  78 |  88 |  166  |  0  |  0  | 
----------------------------------------------------------------------------------- 


Select StudentID, 
     , sum(CASE WHEN SubCode = 112 THEN Marks END) AS PractEx112 
     , sum(CASE WHEN SubCode = 114 THEN Marks END) AS PractEx114 
     , sum(CASE WHEN SubCode IN(112,114) THEN Marks END) AS TotalPract 
     , sum(CASE WHEN SubCode = 116 THEN Marks END) AS ExamMrks116 

FROM STUDENTS 
GROUP BY StudentID 

如何計算上面的SELECT語句中的TotalMarks其中 TotalMarks = 0,如果學生沒有采取ExamMrks116(子碼= 116) 。

否則使用PractEx112的總和(SUBCODE = 112),PractEx114(子碼= 114)& ExamMrks116(子碼= 116)

+0

請格式化您的問題。我理解你的意見和預期的輸出,但我無法理解你對所需邏輯的陳述。 – Andreas 2014-09-25 22:02:23

+0

如何格式化圖像或文本格式的問題 – Tina31 2014-09-25 22:04:10

+0

我需要計算TotalMarks,它是PractEx112 + PractEx114 + ExamMrks116。如果ExamMrks116沒有被學生採用,他們的粒子不會被添加到TotalMarks和TotalMarks = 0中,只有在ExamMarks116列中輸入了標記時纔會添加它。 – Tina31 2014-09-26 03:53:31

回答

1

一種選擇是把這些結果在子查詢中,然後使用case

select StudentID, PractEx112, PractEx114, PractEx116, 
    case when PractEx116 = 0 then 0 else TotalOverall end total 
from (
    select StudentID, 
     sum(case when SubCode = 112 then Marks end) AS PractEx112 , 
     sum(case when SubCode = 114 then Marks end) AS PractEx114 , 
     sum(case when SubCode in (112,114) then Marks end) AS TotalPract , 
     sum(case when SubCode = 116 then Marks end) AS ExamMrks116 
     sum(case when SubCode in (112,114,116) then Marks end) AS TotalOverall 
    from students 
    group by StudentID 
) t 
+0

這不起作用,因爲PractEx112,PractEx114,PractEx116和TotalOverall不是表中使用的變量學生 – Tina31 2014-09-26 13:24:09