(동영상)오라클(ORACLE) UNPIVOT

FSP 0 105 07.31 17:38

(동영상)오라클(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;

 

 

 

 

Comments