- 카테고리:
UNPIVOT¶
열을 행으로 변환하여 테이블을 회전합니다. UNPIVOT은 관계형 연산자로, 열 목록과 함께 테이블 또는 하위 쿼리에서 두 열을 허용하고, 목록에 지정된 각 열에 대해 행을 생성합니다. 쿼리에서 테이블 이름 또는 하위 쿼리 뒤에 FROM 절에 지정됩니다.
UNPIVOT은 PIVOT이 만든 집계를 실행 취소할 수 없기 때문에 PIVOT과 정확히 반대되는 동작을 수행하는 것은 아닙니다.
이 연산자는 넓은 테이블(예: empid, jan_sales, feb_sales, mar_sales)을 더 좁은 테이블(예: empid, month, sales)로 변환하는 데 사용할 수 있습니다.
- 참고 항목:
구문¶
매개 변수¶
{ INCLUDE | EXCLUDE } NULLSname_column에 NULLs가 있는 행을 포함할지 제외할지 지정합니다.INCLUDE NULLS는 NULLs가 있는 행이 포함됩니다.EXCLUDE NULLS는 NULLs가 있는 행을 제외합니다.
기본값:
EXCLUDE NULLSvalue_column생성된 열에 할당할 이름으로, 열 목록에 있는 열의 값으로 채워집니다.
name_column생성된 열에 할당할 이름으로, 열 목록에 있는 열의 이름으로 채워집니다.
column_list단일 피벗 열로 순환할 소스 테이블 또는 하위 쿼리의 열 이름입니다. 열 이름은
name_column을 채우고 열 값은value_column을 채웁니다.column_list에는 하위 쿼리가 아닌 리터럴 열 이름만 포함할 수 있습니다.column_list의 열은 다음과 같은 예외를 제외하고 정확히 동일한 데이터 타입을 가져야 합니다.텍스트 문자열 의 데이터 타입은 길이가 다를 수 있습니다.
열에 텍스트 문자열이 포함된 경우 열마다 텍스트에 다른 데이터 타입을 사용할 수 있습니다. 예를 들어, 목록에 VARCHAR 열과 CHAR 열을 포함할 수 있습니다.
[ AS ] col_alias원래 열 이름 대신 UNPIVOT 작업의 결과에 사용할 열 별칭을 지정합니다. 동일한 열 이름에 대해 다른 별칭을 사용할 수 없습니다. 그러나 여러 열 이름에 동일한 별칭을 사용할 수는 없습니다. AS 키워드는 선택 사항입니다.
사용법 노트¶
LATERAL 조인 </sql-reference/constructs/join-lateral>`을 사용하여 UNPIVOT 작업의 결과 세트를 직접 참조할 수 없습니다. 이를 시도하려고 하면 오류가 반환됩니다. 해결 방법으로 UNPIVOT 결과를 먼저 임시 테이블로 구체화한 다음, LATERAL 조인에서 해당 테이블을 참조합니다. 이 예제에서 선택한 ``monthly_sales` 테이블을 생성하고 로드하려면 :ref:`예제 섹션 <label-unpivot-examples>`을 참조하세요.
LATERAL은 UNPIVOT 결과 세트를 직접 참조할 수 없으므로 다음 쿼리는 작동하지 않습니다.
다음 CREATE TEMPORARY TABLE 문은 임시 테이블을 생성하여 UNPIVOT 결과를 구체화합니다. 해당 문 다음에 오는 쿼리는 LATERAL 조인의 임시 테이블을 참조합니다.
예¶
다음과 같은 구조와 데이터로 테이블 monthly_sales 를 만듭니다.
개별 월 열의 피벗을 해제하여 각 직원에 대해 month 기준으로 단일 sales 값을 반환합니다.
다음 예는 이전 예와 동일하지만, 열 이름에 별칭을 사용합니다.
이전 SELECT 문은 기본적으로 NULLs을 제외합니다. 따라서 2월의 어플라이언스 행은 결과에 포함되지 않습니다. 결과에 NULLs를 포함하려면 다음 SQL 문을 실행합니다.
이 출력에는 2월의 가전제품에 대한 행이 포함되어 있습니다.
* 로 모든 열을 선택하는 대신, SELECT 목록의 특정 열을 포함하고 UNPIVOT value_column 및 name_column 을 참조할 수 있습니다. 다음 예는 이전 예와 비슷하지만, SELECT 목록에서 value_column sales 와 name_column month 를 지정합니다. 이 쿼리는 empid 열을 제외합니다.