(동영상)오라클(ORACLE) UNPIVOT구
-----------------------------------------------
-- ORACLE UNPIVOT 구
-----------------------------------------------
-- ORACLE 11g 이후 사용가능 한 UNPIVOT구는 열을 행으로 전환하는 구문
--실습을 위한 테이블.
SELECT ename, job, sal, comm FROM emp;
SELECT * FROM dept;
-- 예문 입니다.
with a as ( SELECT ename, sal FROM emp )
select *
from a
unpivot (
income -- 데이터영역의 칼럼명
for income_type -- 칼럼영역의 칼럼명
in (sal) -- 데이터 영역에 실제 들어오는 값,이 칼럼명이 칼럼영역에 표시됨
);
-- comm 칼럼을 추가 해보겠습니다.
with a as (
select ename, sal, comm from emp
)
select *
from a
unpivot (
income -- 데이터영역의 칼럼명
for income_type -- 칼럼영역의 칼럼명
in (sal, comm) -- 데이터 영역에 실제 들어오는 값, 이 칼럼명이 칼럼영역에 표시됨
);
-- 부서별, 직무별로 사원수를 보는 쿼리를 작성해보자.
-- UNPIVOT 이용
WITH a AS (
SELECT d.dname, job
FROM emp e, dept d
WHERE e.deptno = d.deptno
)
SELECT dname, job_type, count(1) as "사원수" FROM a --column_name은 사용안함
UNPIVOT INCLUDE NULLS(
job_type
FOR column_name
IN ( job )
)
GROUP BY dname, job_type
ORDER BY dname;
-- PIVOT 이용
SELECT *
FROM
(
SELECT d.dname, job
FROM emp e, dept d
WHERE e.deptno IS NOT NULL
AND e.deptno = d.deptno
)
-- PIVOT 구문은 PIVOT, PIVOT FOR, PIVOT IN 총 3개의 절이 필요하다.
-- PIVOT 절에는 그룹함수가 적용된 컬럼을 정의한다. 여기서는 COUNT(*)
-- FOR 절: PIVOT 기준컬럼을 정의한다. 여기서는 job
-- IN 절: FOR절에서 정의한 컬럼(job)에서 필터링을 정의한다. 세로로 나올 칼럼들...
PIVOT (
COUNT(*)
FOR job
IN ('CLERK','SALESMAN','MANAGER','ANALYST','PRESIDENT')
)
ORDER BY dname;