더북(TheBook)

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

지금부터 위와 같은 형태의 데이터를 변환해 각 과목을 컬럼으로 만들고 과목별 점수를 출력해 보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.