ホームページ >データベース >mysql チュートリアル >SQL Serverで複数の列を持つテーブルを転置する方法は?

SQL Serverで複数の列を持つテーブルを転置する方法は?

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

How to Transpose a Table with Multiple Columns in SQL Server?

SQL Server の複数列ピボット メソッド

テーブルを転置形式に変換すると、さまざまな状況で役立ちます。この記事では、Microsoft SQL Server で複数の列 (A、B など) を含むテーブルを転置する方法に焦点を当てます。

UNPIVOT と PIVOT を使用したデータのピボット

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

  • UNPIVOT: 複数の列を行に変換し、列名 (A、B など) を含む Col という名前の新しい列と、対応する値を含む値列を作成します。
  • 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 以降の CROSS APPLY メソッドと VALUES メソッド

SQL Server 2008 以降の場合は、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>

これにより、ACalls 列と BCalls 列が行に転置され、曜日ごと (月曜日、火曜日など) の列ヘッダーが作成されます。

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

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