PIVOT
열을 행으로 ROW 형태의 데이터를 COLUMN 형태로 보여주는 쿼리이다.
컬럼의 값을 기준으로 새로운 컬럼을 도출하여 다양한 집계함수를 적용 가능하다.
UNPIVOT
행을 열으로 COLUMN 형태를 ROW 형태로 보여주는 쿼리이다.
Pivot 된 결과를 되돌리는 기능이 아닌 순수하게 Pivot 에 대응 되는 개념이다.
Pivot 된 결과를 Unpivot 을 쓴다고 해도 원래의 Pivot 전 테이블로 돌아갈 수 없다.
컬럼을 특정 컬럼의 값으로 대응하여 해당 컬럼의 값은 별도의 컬럼에 표시하여 나열한다.
기능적으로 Pivot 과 반대되는 개념이다.
1 2 3 4 5 6 7 8 9 10 11 12 | -- PIVOT 사용 전 WITH T AS ( SELECT CHR(LEVEL + 64) C , LEVEL V FROM DUAL connect by LEVEL <= 10 ) SELECT C , TO_CHAR(V) V FROM T; | cs |
출력 결과
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -- PIVOT 사용 후 WITH T AS ( SELECT CHR(LEVEL + 64) C , LEVEL V FROM DUAL CONNECT BY LEVEL <= 10 ) SELECT * FROM ( SELECT C , V FROM T ) PIVOT ( MIN(C) FOR V IN(1 V1, 2 V2, 3 V3, 4 V4, 5 V5, 6 V6, 7 V7, 8 V8, 9 V9, 10 V10)) | cs |
출력 결과
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -- UNPIVOT 사용 후 WITH T AS ( SELECT CHR(LEVEL + 64) C , LEVEL V FROM DUAL connect by LEVEL <= 10 ) SELECT * FROM ( SELECT C , TO_CHAR(V) V FROM T ) UNPIVOT ( V FOR GB2 IN (C AS 1, V AS 2) ) | cs |
출력 결과
1 2 3 4 5 6 7 8 9 10 11 12 | -- PIVOT WITH T AS( SELECT '1월' 월, '홍길동' 성명, 110 급여 FROM DUAL UNION ALL SELECT '1월' 월, '홍길동' 성명, 30 급여 FROM DUAL UNION ALL SELECT '1월' 월, '이상현' 성명, 210 급여 FROM DUAL UNION ALL SELECT '1월' 월, '김성현' 성명, 200 급여 FROM DUAL UNION ALL SELECT '2월' 월, '김성현' 성명, 120 급여 FROM DUAL UNION ALL SELECT '2월' 월, '이상현' 성명, 220 급여 FROM DUAL ) SELECT * FROM T PIVOT ( SUM(급여) FOR 월 IN ('1월','2월')) | cs |
출력 결과
1 2 3 4 5 6 7 | -- UNPIVOT WITH T AS( SELECT '홍길동' 성명, 140 일월, 120 이월 FROM DUAL UNION ALL SELECT '김철수' 성명, 210 일월, 220 이월 FROM DUAL ) SELECT * FROM T UNPIVOT(급여 FOR 월 IN(일월, 이월)) | cs |
출력 결과
'전체 > Oracle' 카테고리의 다른 글
ORACLE VIEW (0) | 2017.06.12 |
---|---|
ORACLE PIVOT 사용 달력 만들기, 분석함수 사용 달력 만들기 (0) | 2017.06.11 |
ORACLE 정규표현식 SUBSTR, REPLACE, INSTR, DECODE, TRIM 사용하기 (2) | 2017.06.05 |
ORACLE 계층형 쿼리 만들기 (0) | 2017.06.05 |
정규표현식 (0) | 2017.05.31 |