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 サイトの他の関連記事を参照してください。