홈 › SQL 고급 › 05 / 10

행과 열 바꾸기

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

행과 열 바꾸기: PIVOT, UNPIVOT, 조건부 집계

사원별 분기 매출을 "행 1개당 분기 1개" 로 저장해 두면 보고서에서는 분기가 열로 펼쳐진 표가 필요합니다. 이 레슨은 모든 DB 에서 되는 조건부 집계로 행을 열로 돌리고, 반대로 열을 행으로 돌리는 방법을 다룹니다. Oracle·MSSQL 의 PIVOT·UNPIVOT 은 H2 미지원이라 결과는 도식으로 보입니다.

1. 왜 배우는가

orders 에는 매출이 "사원, 분기, 금액" 한 줄씩 쌓입니다. 이 모양은 저장에 좋지만, 보고서는 사원이 행이고 1분기~4분기가 열인 표를 원합니다. 반대로 엑셀에서 올라온 데이터는 분기가 열로 펼쳐져 있어 그룹 집계나 조인에 쓰기 어렵습니다.

행을 열로 돌리는 것이 피벗(pivot), 열을 행으로 돌리는 것이 언피벗(unpivot)입니다. Oracle 11g 와 MSSQL 2005 는 전용 문법 PIVOT·UNPIVOT 을 제공하지만, MySQL 에는 없습니다. Tibero 는 PIVOT 지원 여부를 버전별로 확인해야 합니다.

그래서 어디서나 통하는 방법을 먼저 익힙니다. 중급 05 CASE 에서 배운 조건부 집계, 즉 SUM(CASE WHEN ... THEN ... END) 를 발전시키면 피벗이 됩니다. 전용 문법은 그 뒤에 "같은 일을 더 짧게 쓰는 방법" 으로 보면 됩니다.