Pivot ... 엑셀... 아시죠 ?
- 세로로 쌓은 데이터를 가로로 펼쳐서 보여줘야 하는 경우가 종종 발생할 때 사용
- 엑셀의 pivot table과 크게 다르지 않아요
예시
| MONTH | CATEGORY | AMOUNT |
|---|---|---|
| 1 | 식품 | 100 |
| 1 | 의류 | 200 |
| 2 | 식품 | 150 |
| 2 | 의류 | 300 |
SELECT *
FROM (
SELECT MONTH
, CATEGORY
, AMOUNT
FROM COMPANY_OUTPUT
)
PIVOT (
SUM(AMOUNT)
FOR CATEGORY IN (
'식품' AS FOOD
, '의류' AS CLOTHES
)
);
| MONTH | FOOD | CLOTHES |
|---|---|---|
| 1 | 100 | 200 |
| 2 | 150 | 300 |
pivot 사용법 (행의 값을 열의 값으로, 돌려 돌려 돌림판)
SELECT *
FROM (
SELECT [피벗에 사용할 컬럼들] -- select 문으로 우선 피벗으로 바꿀 컬럼 호출
FROM [테이블명]
)
PIVOT (
[집계함수]([집계할 컬럼]) -- 연산 및 연산 할 컬럼
FOR [피벗 기준 컬럼] -- 피벗에 넣을 컬럼
IN ([가로로 펼칠 값들]) -- 헤더에 보여 줄 컬럼
);
주의사항
- IN 절 안에 값은 미리 알아야함 (즉각적으로 바꿔치기 그런거 안 됨)
- 즉 서브쿼리에서 데이터를 최대한 가공해야함
unpivot 사용법 (열의 값을 행의 값으로, 돌려 돌려 돌림판)
SELECT *
FROM (
SELECT MONTH, FOOD, CLOTHES
FROM (
SELECT MONTH,
CATEGORY,
AMOUNT
FROM COMPANY_OUTPUT
)
PIVOT (
SUM(AMOUNT)
FOR CATEGORY IN (
'식품' AS FOOD,
'의류' AS CLOTHES
)
)
)
UNPIVOT (
AMOUNT FOR CATEGORY IN (
FOOD AS '식품'
, CLOTHES AS '의류'
)
);
UNPIVOT (
[데이터 컬럼] FOR [카테고리 컬럼] IN (
[컬럼1] AS '이름1'
, [컬럼2] AS '이름2'
)
);
주의사항
- 되돌리는 과정에서 null 이 있으면 null 그대로 보여줌 (where 로 정리해야함)
'SQL(oracle)' 카테고리의 다른 글
| [Oracle SQL] Index 란? (ft. 뭐든 과하면 독이다) (0) | 2025.10.06 |
|---|---|
| [Oracle SQL] View vs Snapshot (Materialized View) 차이 (0) | 2025.09.22 |
| [Oracle] inner ? outer ? + ? (0) | 2025.09.10 |
| SQL의 문자열 함수 (2) | 2024.03.06 |
| SQL의 숫자 함수 (0) | 2024.03.05 |