'row를 column으로'에 해당되는 글 1건

  1. 2017.02.02 :: 오라클 - PIVOT과 UNPIVOT
데이터베이스 2017. 2. 2. 00:43

PIVOT과 UNPIVOT


출력 데이터를 열 --> 행으로 또는 행 --> 열로 변환하기 위해 오라클 11g 이전 버전에서는 decode(CASE구분)을 사용해 해결하였으나, SQL의 가독성 및 성능에 문제점이 있었습니다. 그래서 오라클 11g 에서는 PIVOT/UNPIVOT이라는 기능을 지원하여 보다 쉽게 데이터를 가공할 수 있게 되었습니다. 


사용 사례를 보면서 PIVOT과 UNPIVOT의 기능을 알아보겠습니다.


1. PIVOT(열 --> 행)


오라클에 기본적으로 설치된 SCOTT계정의 "SALGRADE" 라는 테이블을 사용해 설명하겠습니다.

PIVOT 기능을 적용할 데이터는 아래 그림과 같습니다.


   

[PIVOT 적용전 데이터]


PIVOT 기능을 적용하여 열로(LOSAL 값) 된 데이터를 행으로 변환

SYNTAX

PIVOT (집계함수([행의로 변환할 칼럼]) FOR [칼럼명으로 사용될 칼럼] IN ( 칼럼명으로 사용될 칼럼의 값, ...))

1
2
3
4
5
WITH PIVOT_TEST AS (SELECT LOSAL, GRADE
                      FROM SALGRADE)
SELECT *
  FROM PIVOT_TEST
  PIVOT (SUM(LOSAL) FOR GRADE IN (1 AS G1,2 AS G2,3 AS G3,4 AS G4,5 AS G5))
cs

 


2. UNPIVOT(행 --> 열)

위에서 PIVOT 기능을 이용해 열 --> 행으로 변환된 데이터를 UNPIVOT 기능을 사용해 원래되로 다시 변환해 보겠습니다.



1
2
3
4
5
6
7
8
9
10
11
WITH PIVOT_TEST AS (
SELECT LOSAL
     , GRADE
  FROM SALGRADE )
, UNPIVOT_TEST AS ( 
SELECT *
  FROM PIVOT_TEST
  PIVOT ( SUM(LOSAL) FOR GRADE IN (1 AS G1,2 AS G2,3 AS G3,4 AS G4,5 AS G5)))
SELECT *
  FROM UNPIVOT_TEST
UNPIVOT ( LOSAL FOR GRADE IN ( G1 AS 1, G2 AS 2, G3 AS 3, G4 AS 4, G5 AS 5 ))
cs


이론적으로 좀 더 깊게 알고 싶으시면 여기를 참조하세요!

'데이터베이스' 카테고리의 다른 글

오라클 권한 조회  (0) 2017.06.28
오라클 계정과 권한  (0) 2017.06.23
오라클 TABLESPACE와 DATAFILE  (0) 2017.06.16
TIMESTAMP 연산  (0) 2017.05.11
오라클의 동적 PL SQL 작성 - EXECUTE IMMEDIATE  (0) 2017.01.24
posted by 생각퍼즐
: