ホームページ >データベース >mysql チュートリアル >UNPIVOT と PIVOT を使用して SQL でテーブルを転置する方法

UNPIVOT と PIVOT を使用して SQL でテーブルを転置する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-14 21:06:44523ブラウズ

How to Transpose Tables in SQL Using UNPIVOT and PIVOT?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。