问题:
在旧版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中文网其他相关文章!