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

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

Patricia Arquette
リリース: 2025-01-14 21:01:43
オリジナル
592 人が閲覧しました

How Can I Transpose a Multi-Column Table in SQL?

SQL Server の複数リストの転置

テーブルの転置とは、行を列に、列を行に変換することを意味します。これは、分析やプレゼンテーションのためにデータをピボットする必要がある場合に特に便利です。

質問:

次の形式の複数の列を含むテーブルを転置したいとします:

Day A B
Mon 1 2
Tue 3 4
Wed 5 6
Thu 7 8
Fri 9 0

次の形式に変換します:

Value Mon Tue Wed Thu Fri
A 1 3 5 7 9
B 2 4 6 8 0

解決策:

SQL で複数の列を転置するには、UNPIVOT 関数と PIVOT 関数を一緒に使用できます。

1. アンピボット:

UNPIVOT 関数は、列を行に変換することでデータを非正規化します。これにより、day、col、value の 3 つの列を持つ新しいテーブルが作成されます。

<code class="language-sql">select day, col, value
from yourtable
unpivot
(
    value
    for col in (A, B)
) unpiv</code>
ログイン後にコピー

2. ピボット:

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>
ログイン後にコピー

注:

  • MAX 集計関数は、重複値が正しく処理されることを保証するために PIVOT クエリで使用されます。
  • SQL Server 2008 以降の場合、UNPIVOT の代わりに VALUES 構文で CROSS APPLY を使用してデータを反転できます。

クエリに適用します:

特定のクエリを転置するには、次の変更コードを使用できます:

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート