2012-02-24 32 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)。