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
    

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

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