오라클 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로 변환 하기를 알아보았습니다.