ホームページ > データベース > mysql チュートリアル > 複数の基準に基づいて MySQL で行を列に動的にピボットする方法

複数の基準に基づいて MySQL で行を列に動的にピボットする方法

Mary-Kate Olsen
リリース: 2025-01-05 12:44:42
オリジナル
978 人が閲覧しました

How to Dynamically Pivot Rows to Columns in MySQL Based on Multiple Criteria?

MySQL で複数の条件を使用して行を列に動的に変換する

質問:

どうすればよいですかMySQL の 2 つの基準に基づいて行を列に動的に変換します。 columns?

コンテキスト:

テーブルには、各行に「data」と「price」という名前の列を持つ複数の行が含まれています。目標は、データと価格の一意の組み合わせを表す列と、対応する行データを含む各セルを含む新しいテーブルにテーブルを変換することです。

解決策:

複数の条件に基づいて行を列に動的に変換するには、MySQL 関数と動的SQL.

  1. データのアンピボット:

まず、元のテーブルをアンピボットして、データの一意の組み合わせごとに複数の行を含む新しいテーブルを作成します。

SELECT id, CONCAT('order', `order`) AS col, data AS value
FROM tableA
UNION ALL
SELECT id, CONCAT('item', item) AS col, price AS value
FROM tableA;
ログイン後にコピー
  1. ピボットデータ:

次に、CASE ステートメントを使用して、アンピボットされたデータを列に集計します。

SELECT id, 
MAX(CASE WHEN col = 'order1' THEN value END) AS order1,
MAX(CASE WHEN col = 'order2' THEN value END) AS order2,
MAX(CASE WHEN col = 'order3' THEN value END) AS order3,
MAX(CASE WHEN col = 'item1' THEN value END) AS item1,
MAX(CASE WHEN col = 'item2' THEN value END) AS item2,
MAX(CASE WHEN col = 'item3' THEN value END) AS item3
FROM (
  SELECT id, CONCAT('order', `order`) AS col, data AS value
  FROM tableA
  UNION ALL
  SELECT id, CONCAT('item', item) AS col, price AS value
  FROM tableA
) d
GROUP BY id;
ログイン後にコピー
  1. 動的 SQL:

クエリを動的にするには、準備されたステートメントを使用し、動的に元のテーブルの一意の列に基づいて CASE ステートメントを生成します。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN col = ''',
      col,
      ''' THEN value END) AS `', 
      col, '`')
  ) INTO @sql
FROM (
  SELECT CONCAT('order', `order`) AS col
  FROM tableA
  UNION ALL
  SELECT CONCAT('item', `item`) AS col
  FROM tableA
) d;

SET @sql = CONCAT('SELECT id, ', @sql, ' 
                  FROM (
                    SELECT id, CONCAT(''order'', `order`) AS col,  data AS value
                    FROM tableA
                    UNION ALL
                    SELECT id, CONCAT(''item'', item) AS col, price AS value
                    FROM tableA
                  ) d
                  GROUP BY id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ログイン後にコピー

この動的クエリは、任意の数の一意の基準を処理し、必要な変換されたテーブルを生成します。

以上が複数の基準に基づいて MySQL で行を列に動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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