데이터를 행과 열 간에 변환하거나 회전하는 SQL 쿼리 연산자입니다.
행 → 열
행을 특정 기준으로 그룹화 하여 열로 변환한다.
SELECT *
FROM (
SELECT sales_date, product_name, sales_amount
FROM sales_table
)
PIVOT (
SUM(sales_amount)
FOR sales_date IN ('2023-01-01' AS jan_1, '2023-01-02' AS jan_2, '2023-01-03' AS jan_3)
);
이 쿼리는 '2023-01-01', '2023-01-02', '2023-01-03' 등의 날짜를 열로 변환하고 해당 날짜의 매출 합계를 표시합니다.
열 → 행
product_name | jan_1 | jan_2 | jan_3 |
---|---|---|---|
Product A | 100 | 150 | 200 |
Product B | 120 | 130 | 180 |
Product C | 80 | 90 | 110 |
⬇️
SELECT *
FROM (
SELECT product_name, jan_1, jan_2, jan_3
FROM sales_summary
)
UNPIVOT (
sales_amount FOR sales_date IN (jan_1, jan_2, jan_3)
);
⬇️
product_name | sales_date | sales_amount |
---|---|---|
Product A | jan_1 | 100 |
Product A | jan_2 | 150 |
Product A | jan_3 | 200 |
Product B | jan_1 | 120 |
Product B | jan_2 | 130 |
Product B | jan_3 | 180 |
Product C | jan_1 | 80 |
Product C | jan_2 | 90 |
Product C | jan_3 | 110 |
이 쿼리는 열로 표시된 날짜 데이터를 행으로 변환하여, 각 제품에 대한 '2023-01-01', '2023-01-02', '2023-01-03'의 매출 데이터를 행으로 표시합니다.
UNPIVOT - FROM절
SELECT *
FROM (
SELECT ID, -- 고유 ID
PARAM_NAME, -- 파라미터 이름
PARAM_VALUE -- 파라미터 값
FROM TEMP_TABLE
UNPIVOT (
(PARAM_NAME, PARAM_VALUE) FOR PARA IN (
(PARA_NM_1, PARA_VAL_1),
(PARA_NM_2, PARA_VAL_2),
(PARA_NM_3, PARA_VAL_3),
(PARA_NM_4, PARA_VAL_4),
(PARA_NM_5, PARA_VAL_5)
)
)
);
ID | PARAM_NAME | PARAM_VALUE | (PARA) |
---|---|---|---|
1 | Apple | 10 | PARA_NM_1_VAL_1 |
1 | Banana | 20 | PARA_NM_2_VAL_2 |
1 | Cherry | 30 | PARA_NM_3_VAL_3 |
2 | Apple | 15 | PARA_NM_1_VAL_1 |
2 | Banana | 25 | PARA_NM_2_VAL_2 |
2 | Cherry | 35 | PARA_NM_3_VAL_3 |