ホームページ > データベース > mysql チュートリアル > UNPIVOT と PIVOT を使用して MS SQL で完全なテーブルを転置するにはどうすればよいですか?

UNPIVOT と PIVOT を使用して MS SQL で完全なテーブルを転置するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-14 20:57:44
オリジナル
360 人が閲覧しました

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

MS SQL Server: UNPIVOT と PIVOT を使用した完全なテーブル転置

MS SQL Server で複数の列を持つテーブルを転置するには、UNPIVOT 関数と PIVOT 関数を使用した組み合わせたアプローチが必要です。 UNPIVOT は複数の列を行に再形成し、PIVOT は行の値を列に変換します。

ステップバイステップガイド:

  1. データのアンピボット:

    このステップでは、列データを行に変換します。 yourtableABvaluecol を実際のテーブル名と列名に置き換えます。

    <code class="language-sql">SELECT day, col, value
    FROM yourtable
    UNPIVOT
    (
        value
        FOR col IN (A, B)
    ) unpiv</code>
    ログイン後にコピー
  2. データピボット:

    ここでは、行データがピボットされて列に戻されます。 特定の列名 (この例では曜日) に一致するように MonTueWedThuFri を調整します。

    <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. 既存のクエリへの統合:

    既存のクエリ内でデータを転置するには、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート