* 로우를 컬럼으로 전환하기

CREATE TABLE CH14_SCORE_TABLE (

  YEARS      VARCHAR2(4),

  GUBUN    VARCHAR2(30),

  SUBJECTS VARCHAR2(30),

  SCORE     NUMBER);

 

① DECODE 또는 CASE

SELECT YEARS

         , GUBUN

         , SUM(국어) 국어

         , SUM(영어) 영어

  FROM (

           SELECT YEARS

                    , GUBUN

                    , CASE WHEN SUBJECTS = '국어' THEN SCORE ELSE 0 END "국어"

                    , CASE WHEN SUBJECTS = '영어' THEN SCORE ELSE 0 END "영어"

            FROM CH14_SCORE_TABLE

           )

GROUP BY YEARS, GUBUN;

 

② WITH 절

WITH MAINS AS (

                       SELECT YEARS

                                , GUBUN

                                , CASE WHEN SUBJECTS = '국어' THEN SCORE ELSE 0 END "국어"

                                , CASE WHEN SUBJECTS = '영어' THEN SCORE ELSE 0 END "영어"

                        FROM CH14_SCORE_TABLE

                       )

SELECT YEARS

         , GUBUN

         , SUM(국어) 국어

         , SUM(영어) 영어

  FROM MAINS

GROUP BY YEARS, GUBUN;

 

③ PIVOT

SELECT *

  FROM (

           SELECT YEARS

                   , GUBUN

                   , SUBJECTS

                   , SCORE

             FROM CH14_SCORE_TABLE

           )

  PIVOT (

           SUM(SCORE)

            FOR SUBJECTS IN ('국어', '영어')

           );

 

* 컬럼을 로우로 전환

CREATE TABLE CH14_SCORE_COL_TABLE (

  YEARS      VARCHAR2(4),

  GUBUN    VARCHAR2(30),

  KOREAN   NUMBER,

  ENGLISH   NUMBER);

 

① UNION ALL

SELECT YEARS, GUBUN, '국어' SUBJECT, KOREAN SCORE

  FROM CH14_SCORE_COL_TABLE

UNION ALL

SELECT YEARS, GUBUN, '영어' SUBJECT, ENGLISH SCORE

  FROM CH14_SCORE_COL_TABLE

ORDER BY 1, 2 DESC;

 

② UNPIVOT

SELECT *

  FROM CH14_SCORE_COL_TABLE

  UNPIVOT (

               SCORE

               FOR SUBJECTS IN (

                                       KOREAN '국어'

                                     , ENGLISH '영어'

                                       )

              );

+ Recent posts