② WITH절을 이용한 방법
WITH절을 이용하는 방법은 DECODE나 CASE문을 이용 방법과 유사한데, 서브 쿼리 대신 WITH을 사용한다.
입력
WITH mains AS ( SELECT years, gubun,
CASE WHEN subjects = '국어' THEN score ELSE 0 END "국어",
CASE WHEN subjects = '영어' THEN score ELSE 0 END "영어",
CASE WHEN subjects = '수학' THEN score ELSE 0 END "수학",
CASE WHEN subjects = '과학' THEN score ELSE 0 END "과학",
CASE WHEN subjects = '지리' THEN score ELSE 0 END "지리",
CASE WHEN subjects = '독일어' THEN score ELSE 0 END "독일어"
FROM ch14_score_table a
)
SELECT years, gubun,
SUM(국어) AS 국어, SUM(영어) AS 영어, SUM(수학) AS 수학,
SUM(과학) AS 과학, SUM(지리) AS 지리, SUM(독일어) AS 독일어
FROM mains
GROUP BY years, gubun;
결과
YEARS GUBUN 국어 영어 수학 과학 지리 독일어
----- ------- -------- ------- ------ ------- ------- -------
2014 기말고사 88 80 93 91 89 83
2014 중간고사 92 87 67 80 93 82
역시 동일한 결과가 나왔다. 코드를 보면 서브 쿼리를 WITH 절로 올린 것만 제외하면 나머지 내용은 같다. WITH 절로 묶으면 서브 쿼리를 사용하는 것보다 가독성이 좀더 좋다고 할 수 있다.