2012-02-24 68 views
0

我有一个表是这样的:MySQL的布局查询

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的这样做的方法吗?我试图避免运行一个过程,并希望显示只有一个查询的数据,以便我可以使用虚拟表。任何帮助将不胜感激!谢谢!

+0

这会为你工作吗? http://stackoverflow.com/questions/6605604/mysql-pivot-query-results-with-group-by – PinnyM 2012-02-24 18:25:25

+0

这被称为交叉表或数据透视表。如果事先未知未知旋转输出中的列数(动态数据透视图),则此操作相对困难,并且存在可用于执行此操作的存储过程。我见过的最佳参考是http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf – 2012-02-24 18:30:09

回答

1

如果你希望这是动态的,你将不得不使用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来返回第一个值(Sorted A-Z)。