홈 › SQL 고급 › 05 / 10

행과 열 바꾸기

PIVOT, UNPIVOT, 조건부 집계
섹션 6진행 0 / 10

6. 정리

행을 열로 돌리는 피벗은 조건부 집계 SUM(CASE WHEN ... THEN ... END) 와 GROUP BY 로 모든 DB 에서 됩니다. 행이 없는 칸은 NULL 이라 SUM 바깥에 COALESCE 를 씌우고, 건수는 COUNT(CASE ...) 로 셉니다. Oracle 은 DECODE 로도 씁니다.

전용 PIVOT·UNPIVOT 은 Oracle 11g, MSSQL 2005 부터이고 MySQL 에는 없으며 Tibero 는 버전별 확인이 필요합니다. IN 목록이 정적이라 열이 바뀌면 동적 SQL 이 필요하고, MSSQL PIVOT 은 필요한 컬럼만 고른 파생 테이블로 넘겨야 합니다.

열을 행으로 돌리는 언피벗은 UNION ALL, CROSS JOIN + CASE, UNPIVOT, MSSQL 의 CROSS APPLY 로 합니다. UNPIVOT 은 NULL 행을 기본으로 빼고 Oracle 만 INCLUDE NULLS 로 남깁니다.

다음 레슨은 소계와 총계를 한 번에 만드는 ROLLUP·CUBE 입니다. 조건부 집계의 바탕인 CASE 는 중급 05 를 참고하세요.