我有一个像这样的表:
id field_label field_value
123 field1 abc
123 field2 bbb
123 field3 ccc
555 field1 cba
555 field2 uhu
555 field3 ddd
现在,我需要它像这样显示:
id field1 field2 field3
123 abc bbb ccc
555 cba uhu ddd
有什么方法可以只使用 MySQL 来做到这一点吗?我试图避免运行过程,并希望仅通过查询来显示数据,以便我可以使用虚拟表。任何帮助将不胜感激!
最佳答案
如果你希望这是动态的,你将不得不进行PIVOT,我相信这在MySQL中不可用(我知道你可以在SQL Server 2005+中做到这一点),但可以通过相当大的努力来完成。如果您喜欢简单/肮脏的解决方案,请尝试以下操作:
SELECT
id,
MAX(IF(field_label = 'field1',field_value,NULL) AS 'field1',
MAX(IF(field_label = 'field2',field_value,NULL) AS 'field2',
MAX(IF(field_label = 'field3',field_value,NULL) AS 'field3'
GROUP BY
id
MAX 将返回最后一个(文本字段按 A-Z 排序)值,但绝不会返回 NULL。您还可以使用 MIN,如果存在重复项,它将返回第一个值(已排序的 A-Z)。
关于MySQL布局查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435900/