2-2-7. PIVOT절과 UNPIVOT절

박은서's avatar
Mar 01, 2026
2-2-7. PIVOT절과 UNPIVOT절

1. PIVOT 절

1️⃣ PIVOT 절의 기초 개념

1) PIVOT 절

  • 테이블의 행을 칼럼으로 변환하여 데이터의 형태 바꿈
  • 데이터 요약 및 보고서 작성에 매우 유용함
  • PIVOT 절을 사용하여 특정 칼럼의 고유 값을 새로운 칼럼으로 만들고, 그 칼럼에 해당하는 데이터 집계할 수 있음

2) PIVOT 절의 형식

SELECT 칼럼명 FROM ( SELECT [피벗할 원본 칼럼] FROM [피벗할 원본 테이블] ) AS [원본 테이블 별칭] PIVOT ( 집계 함수( [집계할 칼럼] ) FOR [피벗 완료된 칼럼명] IN ( [피벗할 칼럼들의 값] ... ) ) AS [피벗 테이블 별칭];

3) PIVOT 절의 예

SELECT * FROM ( SELECT DEPTNO, JOB, EMPNO FROM EMP ) PIVOT ( COUNT(EMPNO) FOR JOB IN ('CLERK', 'SALESMAN', 'MANAGER', 'ANALYST', 'PRESIDENT') );
DEPTNO
CLERK
SALESMAN
MANAGER
ANALYST
PRESIDENT
10
1
0
1
0
1
20
1
4
1
0
0
20
2
0
1
2
0

2. UNPIVOT 절

1️⃣ UNPIVOT 절의 기초 개념

1) UNPIVOT 절

  • 칼럼 데이터를 행 데이터로 변환하는 데 사용됨
  • PIVOT 절과 반대

2) UNPIVOT 절의 형식

SELECT 칼럼명 FROM ( SELECT [피벗할 원본 칼럼] FROM [피벗할 원본 테이블] ) AS [원본 테이블 별칭] UNPIVOT ( [언피벗할 칼럼] FOR [피벗 완료된 칼럼명] IN ( [반환할 칼럼#1], [반환할 칼럼#2], ... ) ) AS [언피벗 테이블 별칭];

3) UNPIVOT 절의 예

  • 임의의 PIVOT ‘EMP_PIVOT’테이블 생성
    • CREATE TABLE EMP_PIVOT AS SELECT * FROM ( SELECT JOB, DEPTNO, SAL FROM EMP WHERE JOB IN ('CLERK', 'MANAGER') ) PIVOT ( SUM(SAL) AS SAL, COUNT(*) AS CNT FOR DEPTNO IN (10 AS DEPT10_ACCOUNTING, 20 AS DEPT20_RESEARCH) );
      JOB
      DEPT10_ ACCOUNTING_SAL
      DEPT10_ ACCOUNTING_CNT
      DEPT20_ RESEARCH_SAL
      DEPT20_ RESEARCH_CNT
      CLERK
      1300
      1
      1900
      2
      MANAGER
      2450
      1
      2975
      1
  • EMP_PIVOT 테이블을 UNPIVOT 하기
    • SELECT JOB, DEPTNO, SAL FROM EMP_PIVOT UNPIVOT ( SAL FOR DEPTNO IN (DEPT10_ACCOUNTING_SAL, DEPT20_RESEARCH_SAL) ) ORDER BY JOB, DEPTNO;
      JOB
      DEPTNO
      SAL
      CLERK
      DEPT10_ACCOUNTING_SAL
      1300
      CLERK
      DEPT20_RESEARCH_SAL
      1900
      MANAGER
      DEPT10_ACCOUNTING_SAL
      2450
      MANAGER
      DEPT20_RESEARCH_SAL
      2975
Share article