2013-10-30 23 views
0

我在Oracle 11g數據庫中。Group Rollup壓制額外的數據行

查詢:

SELECT s.id, s.grade_level, 
((1990+substr(sg.termid,1,2))||'-'||(1991+substr(sg.termid,1,2))) as "School Year", 
SUM(sg.earnedcrhrs) as "Credits" 

FROM students s 
JOIN storedgrades sg ON s.id = sg.studentid 

WHERE s.schoolid = 109 
AND s.id = '3466' 
AND s.enroll_status = 0 
AND sg.schoolid = 109 

GROUP BY ROLLUP(s.id, s.grade_level, substr(sg.termid,1,2)) 
ORDER BY s.id, substr(sg.termid,1,2) 

輸出:

enter image description here

有沒有一種方法,我可以寫我的查詢,從而任5號線或6號線是不是生產出來的?我只需要每個學生一個小計(ID列)。

回答

1

這有點棘手。試試這個:

SELECT s.id, s.grade_level, 
((1990+substr(sg.termid,1,2))||'-'||(1991+substr(sg.termid,1,2))) as "School Year", 
SUM(sg.earnedcrhrs) as "Credits" 

FROM students s 
JOIN storedgrades sg ON s.id = sg.studentid 

WHERE s.schoolid = 109 
AND s.id = '3466' 
AND s.enroll_status = 0 
AND sg.schoolid = 109 

GROUP BY ROLLUP(s.id, (s.grade_level, substr(sg.termid,1,2))) 
ORDER BY s.id, substr(sg.termid,1,2); 

(不同的是,我把s.grade_level, substr(sg.termid,1,2)括號中的GROUP BY子句中)

在一般情況下,我由Tim霍爾強烈推薦這篇文章:Rollup, Cube and GROUPING functions

+0

謝謝您的建議! :-) –

1

我能獲取O'Reilly的副本掌握Oracle SQL作者:Sanjay Misbra & Alan Beaulieu。繼他們的文檔,我居然在一個稍微不同的方式做這個...

我改變了GROUP BY線從

GROUP BY ROLLUP(s.id, s.grade_level, substr(sg.termid,1,2)) 

GROUP BY s.id, s.grade_level, ROLLUP(substr(sg.termid,1,2))