ホームページ > データベース > mysql チュートリアル > MySQL 列データを行ベースのピボット テーブルに変換するにはどうすればよいですか?

MySQL 列データを行ベースのピボット テーブルに変換するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-09 15:02:43
オリジナル
226 人が閲覧しました

How to Transform MySQL Column Data into a Row-Based Pivot Table?

MySQL 列データを行形式 (ピボット テーブル) に変換します

この記事では、複数列データを含む MySQL テーブルを行および列形式のデータに変換する方法について説明します。結果として得られる構造はピボット テーブルと呼ばれ、データの簡潔かつ包括的なビューを提供します。

問題ステートメント:

複数の列を持つテーブルがあり、各列はデータ カテゴリを表します。目標は、行がカテゴリ (col1、col2、col3、col4) を表し、列が月を表すピボット テーブル形式に変換することです ( 1月、2月)。

ソリューションフレームワーク:

MySQL でこの変換を実装するには、次の 2 段階のプロセスに従う必要があります:

アンチパースペクティブ (UNION ALL):

  1. 入力列 (col1、col2 など) を別々の行に分割し、カテゴリ用に新しい列 (「説明」) を作成し、対応する値用に別の列を作成します。 UNION ALL 演算子を使用して、これらの行を 1 つのテーブルに結合します。

視点 (集計と CASE):

  1. CASE ステートメントを使用して、どの値がどの月に属するかを判断しながら、MAX() などの集計関数をアンピボット テーブルに適用します。これにより、必要な列 (Jan、Feb) を作成できるようになります。

実装されたクエリ:

アンチパースペクティブ (UNION ALL):

<code class="language-sql">SELECT
  id,
  month,
  col1 AS value,
  'col1' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col2 AS value,
  'col2' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col3 AS value,
  'col3' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col4 AS value,
  'col4' AS descrip
FROM
  yourtable;</code>
ログイン後にコピー

視点 (集計と CASE):

<code class="language-sql">SELECT
  descrip,
  MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS Jan,
  MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS Feb
FROM
  (
    SELECT
      id,
      month,
      col1 AS value,
      'col1' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col2 AS value,
      'col2' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col3 AS value,
      'col3' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col4 AS value,
      'col4' AS descrip
    FROM
      yourtable
  ) AS source
GROUP BY
  descrip;</code>
ログイン後にコピー

結果:

このクエリは、入力テーブルをピボット テーブル形式に変換します:

DESCRIP Jan Feb
col1 A C
col2 B A
col3 0 G
col4 B E

以上がMySQL 列データを行ベースのピボット テーブルに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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