>데이터 베이스 >MySQL 튜토리얼 >UNPIVOT 및 PIVOT을 사용하여 MS SQL에서 전체 테이블을 어떻게 전치할 수 있습니까?

UNPIVOT 및 PIVOT을 사용하여 MS SQL에서 전체 테이블을 어떻게 전치할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-14 20:57:44321검색

How Can I Transpose a Full Table in MS SQL Using UNPIVOT and PIVOT?

MS SQL Server: UNPIVOT 및 PIVOT을 사용한 완벽한 테이블 전치

MS SQL Server에서 여러 열이 있는 테이블을 전치하려면 UNPIVOTPIVOT 함수를 사용하는 결합된 접근 방식이 필요합니다. UNPIVOT은 여러 열을 행으로 재구성하고, PIVOT은 행 값을 다시 열로 변환합니다.

단계별 가이드:

  1. 데이터 피벗 해제:

    이 단계에서는 열 데이터를 행으로 변환합니다. yourtable, A, B, value, col을 실제 테이블 및 열 이름으로 바꾸세요.

    <code class="language-sql">SELECT day, col, value
    FROM yourtable
    UNPIVOT
    (
        value
        FOR col IN (A, B)
    ) unpiv</code>
  2. 데이터 피버팅:

    여기서 행 데이터는 다시 열로 피벗됩니다. 특정 열 이름(이 예에서는 요일)과 일치하도록 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>
  3. 기존 쿼리에 통합:

    기존 쿼리 내에서 데이터를 바꾸려면 UNPIVOTPIVOT 작업을 통합하세요.

    <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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.