Oracle의 PIVOT
과 UNPIVOT
연산은 데이터의 형태를 변환하는 데 사용됩니다.
PIVOT
: 행 데이터를 열로 변환.UNPIVOT
: 열 데이터를 행으로 변환.
이 기능은 데이터 분석 및 보고서 작성에서 매우 유용합니다. 아래에서 사용법과 함께 예제를 통해 자세히 알아보겠습니다.
1. PIVOT: 행을 열로 변환하기
PIVOT 기본 구조
SELECT <열 선택>, [<집계 함수>(<값>) AS <새로운 열 이름>]
FROM <테이블>
PIVOT (
<집계 함수>(<값>)
FOR <열> IN (<열 값 1>, <열 값 2>, ...)
);
예제 테이블
아래와 같은 SALES
테이블이 있다고 가정합니다.
REGION | YEAR | SALES |
---|---|---|
EAST | 2021 | 1000 |
WEST | 2021 | 1200 |
EAST | 2022 | 1500 |
WEST | 2022 | 1300 |
PIVOT 사용 예제
목표: YEAR
를 기준으로 SALES
데이터를 열로 변환.
SELECT *
FROM SALES
PIVOT (
SUM(SALES) FOR YEAR IN (2021 AS "Y2021", 2022 AS "Y2022")
);
결과:
REGION | Y2021 | Y2022 |
---|---|---|
EAST | 1000 | 1500 |
WEST | 1200 | 1300 |
설명:
SUM(SALES)
는SALES
값을 합산합니다.FOR YEAR IN (2021, 2022)
는YEAR
값(2021, 2022)을 열로 만듭니다.- 열 이름은
AS
를 사용해 별칭(Y2021
,Y2022
)으로 지정했습니다.
다중 열을 사용한 PIVOT
만약 데이터를 REGION
과 함께 집계하고 싶다면, PIVOT
전에 필요한 열을 선택합니다.
SELECT REGION, Y2021, Y2022
FROM SALES
PIVOT (
SUM(SALES) FOR YEAR IN (2021 AS "Y2021", 2022 AS "Y2022")
);
결과: 동일합니다.
2. UNPIVOT: 열을 행으로 변환하기
UNPIVOT 기본 구조
SELECT <열 선택>
FROM <테이블>
UNPIVOT (
<값> FOR <컬럼> IN (<열 1>, <열 2>, ...)
);
예제 테이블
위에서 PIVOT 결과로 얻은 데이터를 사용해 보겠습니다.
REGION | Y2021 | Y2022 |
---|---|---|
EAST | 1000 | 1500 |
WEST | 1200 | 1300 |
UNPIVOT 사용 예제
목표: Y2021
과 Y2022
열을 YEAR
와 SALES
로 변환.
SELECT REGION, YEAR, SALES
FROM (
SELECT REGION, Y2021, Y2022
FROM SALES
)
UNPIVOT (
SALES FOR YEAR IN (Y2021 AS '2021', Y2022 AS '2022')
);
결과:
REGION | YEAR | SALES |
---|---|---|
EAST | 2021 | 1000 |
EAST | 2022 | 1500 |
WEST | 2021 | 1200 |
WEST | 2022 | 1300 |
설명:
UNPIVOT
은Y2021
과Y2022
열을 행으로 변환합니다.FOR YEAR
는 새로운 열 이름(YEAR
)을 정의합니다.IN (Y2021 AS '2021', Y2022 AS '2022')
는 기존 열을 변환 후 매핑할 이름을 지정합니다.
3. PIVOT과 UNPIVOT 결합 예제
초기 테이블
다음은 초기 데이터를 기준으로 PIVOT
과 UNPIVOT
을 차례로 적용해 보겠습니다.
REGION | YEAR | SALES |
---|---|---|
EAST | 2021 | 1000 |
WEST | 2021 | 1200 |
EAST | 2022 | 1500 |
WEST | 2022 | 1300 |
PIVOT 적용
SELECT *
FROM SALES
PIVOT (
SUM(SALES) FOR YEAR IN (2021 AS Y2021, 2022 AS Y2022)
);
결과:
REGION | Y2021 | Y2022 |
---|---|---|
EAST | 1000 | 1500 |
WEST | 1200 | 1300 |
UNPIVOT 적용
PIVOT 결과 데이터를 다시 UNPIVOT을 사용해 원래 형태로 복원합니다.
SELECT REGION, YEAR, SALES
FROM (
SELECT REGION, Y2021, Y2022
FROM SALES
)
UNPIVOT (
SALES FOR YEAR IN (Y2021 AS '2021', Y2022 AS '2022')
);
결과:
REGION | YEAR | SALES |
---|---|---|
EAST | 2021 | 1000 |
EAST | 2022 | 1500 |
WEST | 2021 | 1200 |
WEST | 2022 | 1300 |
4. 응용 예제
예제: 다중 열 PIVOT
다음과 같은 EMPLOYEE_SALES
테이블이 있다고 가정합니다.
EMPLOYEE | DEPT | YEAR | SALES |
---|---|---|---|
Alice | HR | 2021 | 500 |
Bob | HR | 2021 | 600 |
Alice | IT | 2022 | 700 |
Bob | IT | 2022 | 800 |
목표: 부서별 연도별 판매 데이터를 PIVOT.
SELECT *
FROM EMPLOYEE_SALES
PIVOT (
SUM(SALES) FOR YEAR IN (2021 AS Y2021, 2022 AS Y2022)
);
결과:
EMPLOYEE | DEPT | Y2021 | Y2022 |
---|---|---|---|
Alice | HR | 500 | NULL |
Bob | HR | 600 | NULL |
Alice | IT | NULL | 700 |
Bob | IT | NULL | 800 |
예제: 다중 열 UNPIVOT
위의 결과 데이터를 다시 원래 데이터 형태로 복원합니다.
SELECT EMPLOYEE, DEPT, YEAR, SALES
FROM (
SELECT EMPLOYEE, DEPT, Y2021, Y2022
FROM EMPLOYEE_SALES
)
UNPIVOT (
SALES FOR YEAR IN (Y2021 AS '2021', Y2022 AS '2022')
);
결과:
EMPLOYEE | DEPT | YEAR | SALES |
---|---|---|---|
Alice | HR | 2021 | 500 |
Bob | HR | 2021 | 600 |
Alice | IT | 2022 | 700 |
Bob | IT | 2022 | 800 |
결론
Oracle의 PIVOT
과 UNPIVOT
은 데이터를 요약하거나 변환하는 데 매우 강력한 기능입니다.
PIVOT
: 행 데이터를 열로 변환해 요약 데이터를 생성합니다.UNPIVOT
: 열 데이터를 행으로 변환해 세부 데이터를 복원하거나 분석에 활용합니다.
이 기능은 데이터 분석, 보고서 작성, 비즈니스 인텔리전스 작업에서 자주 사용되며, 효율적인 데이터 변환을 가능하게 합니다.