Knowhow | 로우를 컬럼으로 전환하기
자주 있는 일은 아니지만 프로그램을 개발하다 보면 테이블에 있는 로우를 컬럼 형태로 변환해야 할 때가 가끔 발생한다. 아마 필자 생각에는 오라클 SQL이나 PL/SQL에 입문한 뒤 첫 번째 난관이 바로 길게 아래로 떨어지는 로우 형태의 데이터를 옆으로 쭉 늘린 컬럼 형태로 변환하는 것이다. 이번 현장 노하우에서는 로우를 컬럼으로, 그리고 컬럼을 로우로 변환하는 방법을 알아보자.
먼저 실습용 테이블을 만들어야 하는데, 이해하기 쉽게 학생들의 과목별 성적을 담고 있는 테이블을 만든 후 데이터를 집어 넣어 보자.
입력
CREATE TABLE ch14_score_table (
YEARS VARCHAR2(4), -- 연도
GUBUN VARCHAR2(30), -- 구분(중간/기말)
SUBJECTS VARCHAR2(30), -- 과목
SCORE NUMBER ); -- 점수
결과
table CH14_SCORE_TABLE이(가) 생성되었습니다.
입력
INSERT INTO ch14_SCORE_TABLE VALUES('2014','중간고사','국어',92);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','중간고사','영어',87);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','중간고사','수학',67);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','중간고사','과학',80);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','중간고사','지리',93);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','중간고사','독일어',82);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','기말고사','국어',88);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','기말고사','영어',80);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','기말고사','수학',93);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','기말고사','과학',91);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','기말고사','지리',89);
INSERT INTO ch14_SCORE_TABLE VALUES('2014','기말고사','독일어',83);
COMMIT;
SELECT *
FROM ch14_score_table;
결과
YEARS GUBUN SUBJECTS SCORE
----- --------- --------- ---------------------
2014 중간고사 국어 92
2014 중간고사 영어 87
2014 중간고사 수학 67
2014 중간고사 과학 80
2014 중간고사 지리 93
2014 중간고사 독일어 82
2014 기말고사 국어 88
2014 기말고사 영어 80
2014 기말고사 수학 93
2014 기말고사 과학 91
2014 기말고사 지리 89
2014 기말고사 독일어 83
지금부터 위와 같은 형태의 데이터를 변환해 각 과목을 컬럼으로 만들고 과목별 점수를 출력해 보자.