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

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

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-14 11:15:42239ブラウズ

How Can I Dynamically Convert Rows to Columns in MySQL Queries?

MySQL クエリで行を列に動的に変換する

多くのデータ操作では、行を列に変換し、行数に基づいて列数を動的に調整する必要があります。 MySQL はこのピボット操作を直接サポートしていませんが、それをシミュレートする手法があります。

1 つの方法は、GROUP BY 関数と MAX 関数を使用することです。特定の列 (ID など) に基づいて行をグループ化し、MAX 関数を使用してそのグループ内の各注文の最大値を取得することで、注文ごとに列を作成できます。たとえば、次のクエリはテーブル A の行を結果テーブルの列に変換します。

<code class="language-sql">SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) data1,
        MAX(IF(`order` = 2, data, NULL)) data2
FROM    TableA
GROUP   BY ID</code>
注文に複数の値がある場合は、動的 SQL の方が適している可能性があります。これにより、クエリ文字列を動的に作成でき、列の数が注文の数と一致することが保証されます。以下に例を示します:

<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>
どちらの方法でも、目的の結果テーブルが生成されます:

<code>╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║  1 ║ P     ║ S     ║
║  2 ║ R     ║ Q     ║
╚════╩═══════╩═══════╝</code>
これらのメソッドは、MySQL クエリの行を列に動的に変換する効率的な方法を提供し、結果が基になるデータの変更に確実に適応するようにします。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。