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

MySQL で行を動的に列にピボットする方法

Patricia Arquette
リリース: 2025-01-14 10:00:45
オリジナル
271 人が閲覧しました

How to Dynamically Pivot Rows into Columns in MySQL?

MySQL の動的行および列変換スキル

MySQL では、行を列に動的に変換すると同時に、新しい行を収容するために列を動的に追加することは、さまざまな手法を使用して実現できます。

GROUP BY 関数と MAX 関数を使用する

1 つの方法は、GROUP BY 関数と MAX 関数を利用することです。たとえば、次のような行と列を含むテーブルについて考えてみましょう:

<code>表A

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

これらの行を列に変換するには、次のクエリを使用できます:

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

このクエリは、ID 列に基づいて行をグループ化し、MAX ステートメントと IF ステートメントを使用して各注文列に対応する値を返します。結果は次のようになります:

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

動的 SQL を使用する

注文列に複数の値がある場合は、動的 SQL を使用する方が適している可能性があります。これにより、クエリを動的に生成し、さまざまな注文数量に対応できるようになります。

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

このアプローチは、さまざまな順序値に基づいてクエリを動的に生成することで柔軟性を提供し、結果テーブルがデータの変更に自動的に適応することを保証します。

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

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