ホームページ >データベース >mysql チュートリアル >UNPIVOT と PIVOT を使用して SQL でテーブルを転置する方法
SQL テーブルの転置: UNPIVOT 関数と PIVOT 関数の適用
SQL でのテーブルの転置は、UNPIVOT 関数と PIVOT 関数の組み合わせを使用して実現できます。 UNPIVOT 関数は列を行に変換し、PIVOT 関数は行を列に変換します。
アンピボットデータ
UNPIVOT 関数は、複数の列を 1 つの列に変換するために使用されます。この例では、列 A と B を展開する必要があります。次のクエリは、このプロセスを示しています:
<code class="language-sql">select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv;</code>
このクエリは、day、col、value の 3 つの列を持つ新しいテーブルを作成します。列列には列名 (A または B) が含まれ、値列には展開された列からの対応する値が含まれます。
ピボットデータ
PIVOT関数は行を列に変換するために使用されます。この例では、日の値 (月、火、水、木、金) を列に変換する必要があります:
<code class="language-sql">select * from ( select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv ) src pivot ( max(value) for day in (Mon, Tue, Wed, Thu, Fri) ) piv;</code>
最後のクエリは目的の出力を生成します:
<code>Value | Mon | Tue | Wed | Thu | Fri -------|-----|-----|-----|-----|----- A | 1 | 3 | 5 | 7 | 9 B | 2 | 4 | 6 | 8 | 0</code>
クエリにソリューションを適用します
このソリューションを特定のクエリに適用するには、次のように変更できます:
<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>
このクエリは、DataTable 内のデータを目的の形式に変換します。
以上がUNPIVOT と PIVOT を使用して SQL でテーブルを転置する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。