오라클 Oracle 피벗 PIVOT UNPIVOT 으로 행렬 column을 row로 변환 하기

오라클 Oracle 피벗 PIVOT UNPIVOT 으로 행렬 column을 row로  변환 하기


오라클 프로그램에서 데이터 조회 시 행으로 나온 데이터를 열로 변경하거나 할 경우
한 줄씩 서브쿼리를 작성해서 사용하기도 하는데요.
변경해야 할 칼럼이 많아지면 쿼리도 길어지게 됩니다.

이럴 때 피벗을 이용하면 간단하게 처리할 수 있는데요.

그럼 방법을 알아보겠습니다.


피벗을 보여드리기 위해 간단한 테이블을 준비했습니다.
6개의 컬럼이 있는 테이블입니다.

SELECT * FROM TEST_PIVOT




이제 1개의 row를 조회해서 row로 나오도록 해보겠습니다.
col1 값이 10인 것만 조회했습니다

SELECT *
 FROM TEST_PIVOT
 WHERE COL1 = 10




1. UNPIVOT

피벗을 사용하는 방법입니다.

    SELECT *
     FROM ( 피벗 대상 쿼리문)
 UNPIVOT (그룹 함수 FOR 피벗 칼럼 IN ( 피벗 컬럼 .....))


SELECT COL_NAME
          ,VAL
 FROM
 (
        SELECT *
         FROM TEST_PIVOT
 )
 UNPIVOT (  VAL FOR COL_NAME IN (COL1,COL2,COL3,COL4,COL5,COL6)  )


결괏값을 보면 row 형태로 값이 변경되었습니다.



col1,col2만 칼럼만 조회되도록 하면

SELECT COL_NAME
 ,VAL
 FROM
 (
 SELECT *
 FROM TEST_PIVOT
 wherecol1 = 10

 )

 UNPIVOT (  VAL
 FOR COL_NAME IN (COL1,COL2)  -- 조회되고자 하는 칼럼
 )


지정한 2개 컬러만 지정됩니다.


 



전체 내용을 조회하면
row가 추가돼서 조회됩니다.

SELECT COL_NAME
 ,VAL
 FROM
 (
 SELECT *
 FROM TEST_PIVOT
 --  where col1 = 10

 )

 UNPIVOT (  VAL
 FOR COL_NAME IN (COL1,COL2)  -- 조회되고자 하는 칼럼
 )





피벗 된 데이터에서 col1만 조회할 수 있습니다.

SELECT COL_NAME
 ,VAL
 FROM
 (
 SELECT *
 FROM TEST_PIVOT
 -- WHERE COL1 = 10
 )

 UNPIVOT (  VAL
 FOR COL_NAME IN (COL1,COL2,COL3,COL4,COL5,COL6)
 )
 WHERE COL_NAME = 'COL1'





2. PIVOT

PIVOT 은 그룹 함수와 함께 사용해야 합니다.

간단한 샘플을 준비했습니다.

 SELECT SEQ,COL1
 FROM TEST_PIVOT





피벗을 적용하기 위해 MAX 함수를 사용했습니다.
MIN, COUNT, SUM 등을 사용할 수 있습니다.

SELECT *
 FROM
 (
 SELECT SEQ
 ,COL1
 FROM TEST_PIVOT
 )

 PIVOT (    MAX(COL1)
 FOR SEQ IN (1,2,3,4)
 )
;



오라클 Oracle 피벗 PIVOT UNPIVOT 으로 행렬 column을 row로 변환 하기를 알아보았습니다.