2014-09-25 134 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