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 中国語 Web サイトの他の関連記事を参照してください。