[SQL] PIVOT절과 UNPIVOT절
[SQL] PIVOT절과 UNPIVOT절
개요
PIVOT은 회전시킨다는 의미를 갖고 있다. PIVOT 절은 행을 열로 회전시키고, UNPIVOT 절은 열을 행으로 회전시킨다.
PIVOT 절
PIVOT 절은 행을 열로 전환한다. PIVOT 절의 구문은 아래와 같다.
사용법
1
2
3
4
5
6
7
8
9
10
11
-- 중간에 { 는 중괄호 오류때문에 문자로 대체해서 넣었다.
PIVOT [XML]
(
aggregate_function (expr) [[AS] alias]
[, aggregate_function (expr) [[as] alias]] ...
FOR {column | (column [, column]...)}
IN ({{{expr | (expr [, expr]...)} [[AS] alias]} ...
| subquery
| ANY [, ANY]...
})
)
- aggregate_function은 집계할 열을 지정한다.
- FOR 절은 PIVOT할 열을 지정한다.
- IN 절은 PIVOT할 열 값을 지정한다.
다음은 PIVOT 절을 사용한 쿼리다. PIVOT 절은 집계함수와 FOR 절에 지정되지 않은 열을 기준으로 집계되기 때문에 인라인 뷰를 통해 사용할 열을 지정해야 한다.
예제 1
예제에 사용되는 릴레이션은 아래와 같다.
EMP 릴레이션
- 쿼리
1
2
3
4
5
6
7
8
9
SELECT *
FROM (
SELECT A.JOB
, A.DEPTNO
, A.SAL
FROM EMP A
)
PIVOT (SUM(SAL) FOR DEPTNO IN(10, 20, 30))
ORDER BY 1;
- 결과
예제 2
예제에 사용되는 릴레이션은 아래와 같다.
EMP 릴레이션
- 쿼리
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM (
SELECT TO_CHAR(HIREDATE, 'YYYY') AS YYYY
, JOB
, DEPTNO
, SAL
FROM EMP
)
PIVOT (SUM(SAL) FOR DEPTNO IN(10, 20, 30))
ORDER BY 1, 2;
- 결과
UNPIVOT 절
UNPIVOT 절은 PIVOT 절과 반대로 동작한다. 열이 행으로 전환된다. UNPIVOT 절의 구문은 아래와 같다.
사용법
1
2
3
4
5
6
7
8
UNPIVOT [{INCLUDE | EXCLUDE} NULLS]
(
{column | (column [, col]...)}
FOR {column | (column [, col]...)}
IN ({column | (column [, col]...)} [AS {literal | (literal [, literal]...)}]
[, {column | (column [, col]...)} [AS {literal | (literal [, literal]...)}]]...
)
)
- UNPIVOT column 절은 UNPIVOT된 값이 들어갈 열을 지정한다.
- FOR 절은 UNPIVOT된 값을 설명할 값이 들어갈 열을 지정한다.
- IN 절은 UNPIVOT할 열과 설명할 값의 리터럴 값을 지정한다.
예제
예제에 사용되는 릴레이션은 아래와 같다.
T1 릴레이션
- 쿼리
1
2
3
4
5
6
SELECT JOB
, DEPTNO
, SAL
FROM T1
UNPIVOT (SAL FOR DEPTNO IN (D10_SAL, D20_SAL))
ORDER BY 1, 2;
- 결과
읽어주셔서 감사합니다. 😊
Reference
SQL 전문가 가이드 - Kdata 한국데이터산업진흥원
This post is licensed under CC BY 4.0 by the author.




