2013-10-30 31 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))