[퀴즈] 날짜별 모든 코드에 대한 자료 채우기
코드테이블에는 3가지 코드값이 들어 있습니다.
이력테이블에는 일자별 코드에 해당하는 값이 저장되어 있습니다.
3개 코드가 모두 입력되는 날도 있지만 일부 코드만 입력되는 날도 있습니다.
일자별 코드별 코드명과 합계가 출력되는 쿼리를 작성하세요.
일부 코드만 입력된 날짜도 3개 코드가 모두 나와야 합니다.
일자별 소계도 함께 출력하세요.
CODE 테이블
DATA 테이블
결과 테이블
CD
NM
DT
CD
V
DT
NM
V
1
PC
20111201
1
10
20111201
PC
10
2
Monitor
20111201
2
20
20111201
Monitor
63
3
NoteBook
20111201
2
21
20111201
NoteBook
30
20111201
2
22
20111201
소계
103
20111201
3
30
20111202
PC
10
20111202
1
10
20111202
Monitor
0
20111202
3
30
20111202
NoteBook
30
20111204
1
10
20111202
소계
40
20111204
2
40
20111204
PC
10
20111205
3
50
20111204
Monitor
40
20111204
NoteBook
0
20111204
소계
50
20111205
PC
0
20111205
Monitor
0
20111205
NoteBook
50
20111205
소계
50
다음은 원본 테이블 자료입니다.
WITH code AS
(
SELECT 1 cd, 'PC' nm FROM dual
UNION ALL SELECT 2, 'Monitor' FROM dual
UNION ALL SELECT 3, 'NoteBook' FROM dual
)
, data AS
(
SELECT '20111201' dt, 1 cd, 10 v FROM dual
UNION ALL SELECT '20111201', 2, 20 FROM dual
UNION ALL SELECT '20111201', 2, 21 FROM dual
UNION ALL SELECT '20111201', 2, 22 FROM dual
UNION ALL SELECT '20111201', 3, 30 FROM dual
UNION ALL SELECT '20111202', 1, 10 FROM dual
UNION ALL SELECT '20111202', 3, 30 FROM dual
UNION ALL SELECT '20111204', 1, 10 FROM dual
UNION ALL SELECT '20111204', 2, 40 FROM dual
UNION ALL SELECT '20111205', 3, 50 FROM dual
)
[정답보기] <=== 트리플클릭
SELECT d.dt
, NVL(c.nm, '소계') nm
, NVL(SUM(d.v), 0) v
FROM code c
LEFT OUTER JOIN data d
PARTITION BY (d.dt)
ON c.cd = d.cd
GROUP BY d.dt, ROLLUP((c.cd, c.nm))
;