MS SQL Server: UNPIVOT 및 PIVOT을 사용한 완벽한 테이블 전치
MS SQL Server에서 여러 열이 있는 테이블을 전치하려면 UNPIVOT
및 PIVOT
함수를 사용하는 결합된 접근 방식이 필요합니다. UNPIVOT
은 여러 열을 행으로 재구성하고, PIVOT
은 행 값을 다시 열로 변환합니다.
단계별 가이드:
데이터 피벗 해제:
이 단계에서는 열 데이터를 행으로 변환합니다. yourtable
, A
, B
, value
, col
을 실제 테이블 및 열 이름으로 바꾸세요.
<code class="language-sql">SELECT day, col, value FROM yourtable UNPIVOT ( value FOR col IN (A, B) ) unpiv</code>
데이터 피버팅:
여기서 행 데이터는 다시 열로 피벗됩니다. 특정 열 이름(이 예에서는 요일)과 일치하도록 Mon
, Tue
, Wed
, Thu
, Fri
을 조정합니다.
<code class="language-sql">SELECT * FROM (SELECT * FROM ...) src -- Replace ... with the UNPIVOT query from step 1 PIVOT ( MAX(value) FOR day IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
기존 쿼리에 통합:
기존 쿼리 내에서 데이터를 바꾸려면 UNPIVOT
및 PIVOT
작업을 통합하세요.
<code class="language-sql">SELECT * FROM ( SELECT LEFT(DATENAME(dw, datetime), 3) AS DateWeek, col, value FROM DataTable CROSS APPLY ( VALUES ('A', ACalls), ('B', BCalls) ) c (col, value) ) src PIVOT ( SUM(value) FOR DateWeek IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
PIVOT 및 CROSS APPLY 사용 예(SQL Server 2008 이상):
이 예에서는 CROSS APPLY
을 활용하여 보다 간결한 솔루션을 제공합니다.
<code class="language-sql">SELECT day, col, value FROM yourtable CROSS APPLY ( VALUES ('A', ACalls), ('B', BCalls) ) c (col, value) PIVOT ( MAX(value) FOR day IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
중요 고려 사항:
col
열에는 원래 열 이름이 표시됩니다.MAX()
함수는 데이터 요구 사항에 따라 다른 집계 함수(예: SUM()
, AVG()
등)로 대체될 수 있습니다.이 종합 가이드는 MS SQL Server에서 전체 테이블을 효과적으로 전치하여 다양한 데이터 조작 시나리오에 대한 유연성과 적응성을 제공하는 방법을 보여줍니다.
위 내용은 UNPIVOT 및 PIVOT을 사용하여 MS SQL에서 전체 테이블을 어떻게 전치할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!