카테고리:

쿼리 구문

UNPIVOT

열을 행으로 변환하여 테이블을 회전합니다. UNPIVOT은 관계형 연산자로, 열 목록과 함께 테이블 또는 하위 쿼리에서 두 열을 허용하고, 목록에 지정된 각 열에 대해 행을 생성합니다. 쿼리에서 테이블 이름 또는 하위 쿼리 뒤에 FROM 절에 지정됩니다.

UNPIVOT은 PIVOT에 의해 만들어진 집계를 취소할 수 없으므로 PIVOT의 반대가 아닙니다.

이 연산자는 넓은 테이블(예: empid, jan_sales, feb_sales, mar_sales)을 더 좁은 테이블(예: empid, month, sales)로 변환하는 데 사용할 수 있습니다.

참고 항목:

PIVOT

구문

SELECT ...
FROM ...
   UNPIVOT ( <value_column>
             FOR <name_column> IN ( <column_list> ) )

[ ... ]
Copy
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 |
+-------+-------------+-------+-------+
Copy