2013-10-30 2 views
0

저는 Oracle 11g 데이터베이스에 있습니다.그룹화 롤업으로 데이터 여분의 줄을 표시하지 않습니다.

검색어 :

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); 

는 일반적으로

(차이가 나는 괄호 안에 GROUP BY 절에 s.grade_level, substr(sg.termid,1,2)을 넣어이다), 내가보기 엔 팀 홀에서이 기사를 추천 : Rollup, Cube and GROUPING functions

+0

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

에서 선으로 그룹을 변경 ... 약간 다른 방법으로 이런 짓을! :-) –

1

을 나는 할 수 있었다 O'Reilly의 복사본을 얻으십시오 Oracle SQL 마스터하기 Sanjay Misbra & Alan Beaulieu. 자신의 문서에 따라, 나는 실제로 당신의 제안에 감사드립니다

내가

GROUP BY s.id, s.grade_level, ROLLUP(substr(sg.termid,1,2)) 
관련 문제