ホームページ >データベース >mysql チュートリアル >単一列の動的な列名を使用して MySQL でデータをピボットする方法
質問:
古い MySQL テーブルでは、データは「name」という名前の単一の列に一意の値として格納された可変の列名を持っていました。このデータをピボット形式に変換するクエリが必要です。この形式では、名前の値が列ヘッダーになり、対応するフィールド値がそれらのヘッダーの下の値になります。
解決策:
ピボットのネイティブ サポートがないにもかかわらず、MySQL は動的 SQL と GROUP_CONCAT() 関数を通じてこれを実現できます。
MySQL クエリ:
<code class="language-sql">SELECT CONCAT( 'SELECT `table`.id', GROUP_CONCAT(' , `t_', REPLACE(name, '`', '``'), '`.value AS `', REPLACE(name, '`', '``'), '`' SEPARATOR ''), ' FROM `table` ', GROUP_CONCAT(' LEFT JOIN `table` AS `t_', REPLACE(name, '`', '``'), '` ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name) SEPARATOR ''), ' GROUP BY `table`.id' ) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t; PREPARE stmt FROM @qry; EXECUTE stmt;</code>
手順:
結果:
クエリは、列ヘッダーとして名前の値、対応する値としてフィールド値を含むピボットされた結果セットを返します。
id | timezone | language | country | something |
---|---|---|---|---|
0 | Europe/London | en | 45 | x |
1 | Europe/Paris | fr | 46 | NULL |
以上が単一列の動的な列名を使用して MySQL でデータをピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。