MySQL で行を列に変換する
次のテーブルを持つデータベースを考えます。
CREATE TABLE mytable ( ID INTEGER PRIMARY KEY, Type INTEGER, Email VARCHAR(255), Degignation VARCHAR(255) );
目標は次のとおりです。データを行から列に変換します。タイプ列が列ヘッダーになり、最後の列が行値になります。予想される出力は次のようになります:
ID 202 234 239 Email 1000000000 Entrepreneur Engineering,Development CTO [email protected]
この変換を実現するために、MySQL はかなり複雑なクエリを提供します:
SELECT ID, MAX(CASE Type WHEN 202 THEN Degignation END) AS `202`, MAX(CASE Type WHEN 234 THEN Degignation END) AS `234`, MAX(CASE Type WHEN 239 THEN Degignation END) AS `239`, Email FROM mytable GROUP BY ID, Email;
このクエリは CASE 式を利用して各行の Type 列をチェックします。そして、対応する Degignation 値を結果セット内の適切な列に割り当てます。 MAX() 関数は、各 Type 列に対して最新 (または最大) 値のみが返されるようにするために使用されます。
クエリには列ヘッダーの固定セットが必要であることに注意することが重要です。型の値は事前にわかっている必要があります。 SQL は、クエリ実行中に検出されたデータ値に基づく動的な列の追加をサポートしていません。
以上がCASE と MAX() を使用して MySQL で行を列にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。