행과 열 바꾸기: 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) 를 발전시키면 피벗이 됩니다. 전용 문법은 그 뒤에 "같은 일을 더 짧게 쓰는 방법" 으로 보면 됩니다.