개요
PIVOT 함수는 행을 열로 바꿔주는 역할로, PIVOT 기능을 이용하면 DECODE의 복잡하고 비 직관적인 코드를 조금 더 직관적으로 작성할 수 있습니다.
다만, PIVOT 기능을 사용하더라도 PIVOT을 수행할 컬럼을 미리 정의해 놓아야 하므로 상황에 따라
PIVOT 또는 DECODE 중 적합한 방식을 선택해 사용하시기 바랍니다.
참고
Tibero는 6 버전부터 PVIOT, DECODE 기능을 모두 제공합니다.
방법
문법
SELECT *
FROM ( 피벗 대상 쿼리문 )
PIVOT ( 그룹합수(집계컬럼) FOR 피벗컬럼 IN (피벗컬럼값 AS 별칭 ... )
SQL
복사
예제
--직군별, 월별 입사 건수
SELECT *
FROM (
SELECT job , TO_CHAR(hiredate, 'FMMM') || '월' hire_month
FROM emp
)
PIVOT (
COUNT(*)
FOR hire_month IN ('1월', '2월', '3월', '4월', '5월', '6월',
'7월', '8월', '9월', '10월', '11월', '12월')
)
--직군별, 부서코드별 급여 합계 (피벗컬럼 별칭 사용)
SELECT job
, d1
, d2
, d3
FROM (
SELECT job
, deptno
, sal
FROM emp
)
PIVOT (
SUM(sal) FOR deptno IN ('10' AS d1, '20' AS d2, '30' AS d3)
)
--DECODE 직군별, 월별 입사 건수 → pivot이 훨씬 직관적입니다.
SELECT job
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '1', 1, 0)) "1월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '2', 1, 0)) "2월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '3', 1, 0)) "3월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '4', 1, 0)) "4월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '5', 1, 0)) "5월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '6', 1, 0)) "6월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '7', 1, 0)) "7월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '8', 1, 0)) "8월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '9', 1, 0)) "9월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '10', 1, 0)) "10월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '11', 1, 0)) "11월"
, SUM(DECODE(TO_CHAR(hiredate, 'FMMM'), '12', 1, 0)) "12월"
FROM emp
GROUP BY job
SQL
복사