ホームページ >データベース >mysql チュートリアル >複数の列を持つ SQL テーブルを転置するにはどうすればよいですか?

複数の列を持つ SQL テーブルを転置するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-14 20:52:47293ブラウズ

How to Transpose a SQL Table with Multiple Columns?

複数の列を持つ SQL テーブルを転置する

質問:

複数の列を含む SQL テーブルを転置する必要があります。例:

<code>Day  A  B 
---------
Mon  1  2
Tue  3  4
Wed  5  6
Thu  7  8
Fri  9  0</code>

次の形式に移調します:

<code>Value Mon Tue Wed Thu Fri 
--------------------------
A      1   3   5   7   9
B      2   4   6   8   0</code>

解決策:

複数の列を含むテーブルを転置するには、UNPIVOT 関数と PIVOT 関数を一緒に使用できます。

  1. UNPIVOT: 複数の列 (A、B) を行に変換し、列名の列を追加します:
<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv</code>
  1. 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>

これにより、必要な転置テーブルが生成されます。

追加メモ:

  • SQL Server のバージョンが 2008 以降の場合は、UNPIVOT 関数の代わりに CROSS APPLY と VALUES を使用してデータを転置できます。
<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv</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>

以上が複数の列を持つ SQL テーブルを転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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