Pivot : 열을 행으로 변환해주는 내장함수 ( 오라클 11g이상버전에서 사용가능 )
쿼리를 동적으로 90도 돌려서 출력해야할때가 있다.
즉, 아래와같이 세로로 나열된 쿼리의 특정컬럼을 가로로 나열 하고 싶을때 사용 한다.
< 원본 Data >
ID tDate tCode tResult
100 2013-02-01 L201 59
020 2012-03-01 L203 18
020 2012-03-01 LL77 Negative
100 2011-03-19 L711 Positive
100 2011-03-19 L203 23
921 2010-09-27 L781 478
=================================
SELECT ID, tDate, tCode, tResult
FROM EMP T
=================================
< Pivot 결과 >
ID tDate L201 L203 LL77 L711 ... <= tCode
020 2013-03-01 18 Negative
100 2013-02-01 59
100 2011-03-19 23 Positive
==========================================================
SELECT * FROM
(
SELECT ID, tDate, tCode, tResult
FROM EMP T
)
Pivot
(
max(tResult)
For tCode in ('L201', 'L203', 'LL77', 'L711', ... )
)
그룹함수로 묶어주는기능을함( SUM, COUNT 등의 함수로도 사용가능 )
FOR tCode in (...) 부분은 고정적으로 명시 해 줄수 밖에없는데
이를 조회되는 tCode에 따라 가변적으로 나오게 하고싶다면 XML을 이용하여 동적 피벗팅을해야함.
=========================================================
ex2)
-- PIVOT 절에 2개 이상의 집계함수를 사용할 수 있다.
SELECT *
FROM
(
SELECT PRODID, YMD, CYMD
FROM TABLE_NAME
WHERE PRODID IN('A', 'B', 'C') AND YMD >= '20150101' AND YMD <= '20151231'
)
PIVOT
(
COUNT(*) AS PUR_CNT, COUNT(CYMD) AS CNL_CNT
FOR PRODID IN ('A','B','C')
)
YMD A_PUR_CNT A_CNL_CNT B_PUR_CNT B_CNL_CNT C_PUR_CNT C_CNL_CNT
-------- ------------ ------------ ------------ ------------ ------------ ------------
20151214 227 0 10 0 20 1
20151215 440 0 20 0 30 0
20151216 468 2 9 0 5 3
'DB > 오라클' 카테고리의 다른 글
오라클 분석함수 (0) | 2019.04.05 |
---|---|
오라클 구조 (0) | 2019.04.03 |
오라클객체( 시퀀스, 뷰, 인덱스 ) + 트리거, 사용자와권한 , 롤 (0) | 2019.04.03 |
오라클 시퀀스(sequence) (0) | 2019.04.03 |
오라클 트랜잭션 (0) | 2019.04.03 |