- 카테고리:
UNPIVOT¶
열을 행으로 변환하여 테이블을 회전합니다. UNPIVOT은 관계형 연산자로, 열 목록과 함께 테이블 또는 하위 쿼리에서 두 열을 허용하고, 목록에 지정된 각 열에 대해 행을 생성합니다. 쿼리에서 테이블 이름 또는 하위 쿼리 뒤에 FROM 절에 지정됩니다.
UNPIVOT은 PIVOT에 의해 만들어진 집계를 취소할 수 없으므로 PIVOT의 반대가 아닙니다.
이 연산자는 넓은 테이블(예: empid
, jan_sales
, feb_sales
, mar_sales
)을 더 좁은 테이블(예: empid
, month
, sales
)로 변환하는 데 사용할 수 있습니다.
- 참고 항목:
구문¶
SELECT ...
FROM ...
UNPIVOT ( <value_column>
FOR <name_column> IN ( <column_list> ) )
[ ... ]
value_column
생성된 열에 할당할 이름으로, 열 목록에 있는 열의 값으로 채워집니다.
name_column
생성된 열에 할당할 이름으로, 열 목록에 있는 열의 이름으로 채워집니다.
column_list
단일 피벗 열로 좁힐 소스 테이블 또는 하위 쿼리에 있는 열의 이름입니다. 열 이름은
name_column
을 채우고 열 값은value_column
을 채웁니다.column_list
은 하위 쿼리가 아닌 리터럴 열 이름만 포함해야 합니다.
예¶
다음 구조와 데이터가 있는 monthly_sales
테이블이 주어질 때 개별 월 열의 피벗을 해제하여 각 직원에 대한 month
기준의 단일 sales
값을 반환합니다.
-- example setup CREATE OR REPLACE TABLE monthly_sales(empid INT, dept TEXT, jan INT, feb INT, mar INT, april INT); INSERT INTO monthly_sales VALUES (1, 'electronics', 100, 200, 300, 100), (2, 'clothes', 100, 300, 150, 200), (3, 'cars', 200, 400, 100, 50); -- UNPIVOT example SELECT * FROM monthly_sales UNPIVOT(sales FOR month IN (jan, feb, mar, april)) ORDER BY empid; +-------+-------------+-------+-------+ | EMPID | DEPT | MONTH | SALES | |-------+-------------+-------+-------| | 1 | electronics | JAN | 100 | | 1 | electronics | FEB | 200 | | 1 | electronics | MAR | 300 | | 1 | electronics | APRIL | 100 | | 2 | clothes | JAN | 100 | | 2 | clothes | FEB | 300 | | 2 | clothes | MAR | 150 | | 2 | clothes | APRIL | 200 | | 3 | cars | JAN | 200 | | 3 | cars | FEB | 400 | | 3 | cars | MAR | 100 | | 3 | cars | APRIL | 50 | +-------+-------------+-------+-------+