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

MySQL で行を列に動的に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-14 11:22:46
オリジナル
815 人が閲覧しました

How to Dynamically Convert Rows to Columns in MySQL?

MySQL の行から列への動的クエリ

MySQL は行データから列データへの変換をサポートしており、必要に応じて新しい列を動的に追加できます。このプロセスは多くの場合、データをよりユーザーフレンドリーな表形式で表示するピボット テーブルに関連付けられます。この変換を実現するには、GROUP BY 関数と MAX 関数を使用できます。

以下はテーブル A とテーブル B を含む例です:

<code>表 A
+--+-----+----+
|id|order|data|
+--+-----+----+
|1 |1    |P   |
+--+-----+----+
|2 |2    |Q   |
+--+-----+----+
|2 |1    |R   |
+--+-----+----+
|1 |2    |S   |
+--+-----+----+

表 B
+--+----+----+
|id|name|value|
+--+----+----+
|1 |name1|data1|
+--+----+----+
|1 |name2|data2|
+--+----+----+
|2 |name1|data3|
+--+----+----+
|2 |name2|data4|
+--+----+----+</code>
ログイン後にコピー

このデータ構造を行と列を含むテーブルに変換するには、次のクエリを使用できます:

<code class="language-sql">SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) AS data1,
        MAX(IF(`order` = 2, data, NULL)) AS data2
FROM    TableA
GROUP   BY ID</code>
ログイン後にコピー

このクエリの出力は次のようになります:

<code>+--+-----+-----+
|id|data1|data2|
+--+-----+-----+
|1 |P    |S    |
+--+-----+-----+
|2 |R    |Q    |
+--+-----+-----+</code>
ログイン後にコピー

ご覧のとおり、テーブル B の各行は、結果のテーブルの列に変換されています。

データに同じ「順序」フィールドに複数の値が含まれている場合は、動的 SQL を組み合わせて変換をより効率的に処理できます。この方法では、「order」フィールドのさまざまな値に基づいてクエリを動的に生成します:

<code class="language-sql">SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                  FROM    TableName
                  GROUP   BY ID');

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

この動的 SQL アプローチの利点は、新しい値が「order」フィールドに追加されるたびにクエリを手動で変更する必要がないことです。

以上がMySQL で行を列に動的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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