How to transform (or possibly pivot) these MySQL results into a consolidated view?
MySQL查询的结果如下:
1 2 3 4 5 6 7 |
如何将结果转换为此?
1 2 3 4 5 |
我更喜欢SQL解决方案,但是结果被传递到PHP中,因此如果没有SQL解决方案,我可以使用PHP操纵结果。我不愿意使用PHP,但是我感觉对于
当我在Google上搜索答案时,我听说过使用"旋转"一词。我不完全理解这是什么意思,因此我不确定是否在此处进行透视。
提前感谢您的任何建议。
尽管戈登·利诺夫(Gordon Linoff)的解决方案是公认的答案,但我决定添加一个示例来说明如何实现它。这将对以后偶然遇到此问题的任何人有所帮助!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | -- create a table CREATE TABLE `items` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `uuid` INT NOT NULL, `key` VARCHAR(255) NOT NULL, `value` VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY (`id`) ); -- insert some rows INSERT INTO `items` (`id`, `uuid`, `key`, `value`) VALUES ('1', '1', 'name', 'Foo'); INSERT INTO `items` (`id`, `uuid`, `key`, `value`) VALUES ('2', '1', 'price', '100'); INSERT INTO `items` (`id`, `uuid`, `key`, `value`) VALUES ('3', '2', 'name', 'Bar'); INSERT INTO `items` (`id`, `uuid`, `key`, `value`) VALUES ('4', '2', 'price', '200'); INSERT INTO `items` (`id`, `uuid`, `key`, `value`) VALUES ('5', '3', 'name', 'Baz'); -- and fetch them SELECT `uuid`, MAX(IF((`key` = 'name'), `value`, NULL)) AS `name`, MAX(IF((`key` = 'price'), `value`, NULL)) AS `price` FROM `items` GROUP BY `uuid`; |
只需使用条件聚合:
1 2 3 4 5 |
如果每个
如果您不知道可能的名称列表,请使用Google" MySQL动态枢纽"作为示例。这需要使用动态SQL。