SQL - PIVOT절과 UNPIVOT절

박현·2022년 10월 31일
0

SQL

목록 보기
26/34

PIVOT 절

: 행을 열로 전환한다.

  • aggregate_function은 집계할 열을 지정한다.
  • FOR 절은 PIVOT할 열을 지정한다.
  • IN 절은 PIVOT할 열 값을 지정한다.

PIVOT 절은 집계함수와 FOR절에 지정되지 않은 열을 기준으로 집계되기 때문에 인라인 뷰를 통해 사용할 열을 지정해야 한다.

입력✏️

SELECT *
  FROM (SELECT JOB, DEPTNO, SAL FROM EMP)
 PIVOT (SUM(SAL) FOR DEPTNO IN (10,20,30))
ORDER BY 1;

출력💻

  • IN절에 별칭을 따로 지정할 수 있다.
  • SELECT절에 부여된 열명을 지정하면 필요한 열만 조회할 수 있다.
  • PIVOT절은 다수의 집계함수를 지원한다.
  • FOR절에도 다수의 열을 기술할 수 있다.
  • PIVOT절을 사용할 수 없는 경우 집계함수와 CASE 표현식으로 PIVOT을 수행할 수 있다.

입력✏️

SELECT JOB
	  ,SUM(CASE DEPTNO WHEN 10 THEN SAL END) AS D10_S
      ,SUM(CASE DEPTNO WHEN 20 THEN SAL END) AS D20_S
      ,SUM(CASE DEPTNO WHEN 30 THEN SAL END) AS D30_S
  FROM EMP
GROUP BY JOB
ORDER BY JOB;

출력💻


UNPIVOT 절

: 열이 행으로 전환된다.

  • UNPIVOT Column 절은 UNPIVOT된 값이 들어갈 열을 지정한다.
  • FOR절은 UNPIVOT된 값을 설명할 값이 들어갈 열을 지정한다.
  • IN절은 UNPIVOT할 열과 설명할 값의 리터럴 값을 지정한다.

입력✏️

SELECT JOB
      ,DEPTNO
      ,SAL
  FROM T1
 UNPIVOT(SAL FOR DEPTNO IN (D10_SAL, D20_SAL))
 ORDER BY 1,2;

출력💻

  • IN절에 별칭을 지정하면 FOR절에 지정한 열의 값을 변경할 수 있다.
  • INCLUDE NULLS 키워드를 기술하면 UNPIVOT된 열의 값이 널인 행도 결과에 포함된다.
  • FOR절에 다수의 열, IN절에 다수의 별칭을 지정할 수도 있다.
  • UNPIVOT절을 사용할 수 없는 경우 카티션 곱을 사용해 UNPIVOT을 수행할 수 있다. UNPIVOT할 열의 개수만큼 행을 복제하고, CASE 표현식으로 UNPIVOT할 열을 선택하는 방식이다.

참고자료 : SQL전문가가이드

0개의 댓글