[SQL] 오라클 데이터를 컬럼으로 바꾸는 PIVOT
2023. 1. 31. 22:29ㆍDB/쿼리
728x90
PIVOT
- PIVOT
오라클에서 기본적으로 조회되는 세로 행의 데이터를 가로로 뒤집어서 조회되도록 함.
*좌측의 테이블구조를 우측의 테이블구조로 조회되도록 함.
SELECT 출력할 컬럼
FROM [PIVOT 대상 테이블]
PIVOT(
[집계함수] FOR [컬럼(가로)으로 출력할 열] IN ([조건 대상 값])
);
--조건 대상값은 컬럼으로 출력할 열 내 존재하는 데이터여야 타깃데이터가 조회됨. (ALIAS 역할이 되기도 함)
*예제테이블(오라클 내에 SCOTT 계정 내 기본적으로 제공되는 EMP 테이블 사용)- 예제테이블 기본조회
SELECT DEPTNO
, JOB
, AVG(SAL) AS SAL
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
- [목적] 아래와 같이 기본조회 세로로 출력되는 데이터를 가로로 컬럼화하여 조회하고자 할 경우
예제테이블의 JOB컬럼 내 존재하는 데이터를 컬럼화하여 부서별 연봉의 평균을 조회
- PIVOT을 사용하지 않고 조회시
SELECT DEPTNO
,AVG (CASE WHEN DEPTNO='10' AND JOB='ANALYST' THEN SAL
WHEN DEPTNO='20' AND JOB='ANALYST' THEN SAL
WHEN DEPTNO='30' AND JOB='ANALYST' THEN SAL
END) AS ANALYST
,AVG (CASE WHEN DEPTNO='10' AND JOB='CLERK' THEN SAL
WHEN DEPTNO='20' AND JOB='CLERK' THEN SAL
WHEN DEPTNO='30' AND JOB='CLERK' THEN SAL
END) AS CLERK
,AVG (CASE WHEN DEPTNO='10' AND JOB='MANAGER' THEN SAL
WHEN DEPTNO='20' AND JOB='MANAGER' THEN SAL
WHEN DEPTNO='30' AND JOB='MANAGER' THEN SAL
END) AS MANAGER
,AVG (CASE WHEN DEPTNO='10' AND JOB='PRESIDENT' THEN SAL
WHEN DEPTNO='20' AND JOB='PRESIDENT' THEN SAL
WHEN DEPTNO='30' AND JOB='PRESIDENT' THEN SAL
END) AS PRESIDENT
,AVG (CASE WHEN DEPTNO='10' AND JOB='SALESMAN' THEN SAL
WHEN DEPTNO='20' AND JOB='SALESMAN' THEN SAL
WHEN DEPTNO='30' AND JOB='SALESMAN' THEN SAL
END) AS SALESMAN
FROM EMP
GROUP BY DEPTNO
- PIVOT을 사용해서 조회
SELECT *
FROM ( SELECT DEPTNO, JOB, SAL FROM EMP )
PIVOT ( AVG(SAL) FOR JOB IN ('ANALYST','CLERK','MANAGER','PRESIDENT') )
PIVOT문에 가로로 출력할 컬럼은 가로로 나열할 때의 GROUP BY의 대상이 됨.
(위 PIVOT 사용 쿼리 내 JOB컬럼이 GROUP BY 되어 집계된 후 가로로 나열됨)
PIVOT문에 사용되지 않은 나머지 컬럼들은 세로로 나열할 때 GROUP BY의 대상이 됨.
(위 PIVOT 사용 쿼리 내 DEPTNO컬럼이 세로로 나열하는 GROUP BY 대상)
집계합수에 사용되는 대상 컬럼은 집계 대상이므로 제외하고 생각.
(위 PIVOT 사용 쿼리 내 SAL컬럼은 집계함수(AVG)의 대상)
728x90
'DB > 쿼리' 카테고리의 다른 글
[SQL] SQL WITH RECURSIVE 사용 (0) | 2023.12.12 |
---|---|
[SQL] 오라클 컬럼을 데이터로 바꾸는 UNPIVOT (0) | 2023.02.02 |
[SQL] 오라클 계층형쿼리 START WITH ~ CONNECT BY (0) | 2023.01.30 |
[SQL] 논리연산자 우선순위 (0) | 2022.08.24 |
[SQL] 특수문자의 이스케이프 처리방법 (0) | 2022.08.24 |