2017-06-27 39 views
1

https://i.stack.imgur.com/5Pw2L.pngMySQL將行數倍增至列

我有一個問題,我想在MySQL中進行預處理。我有一個select返回一個id的多個行和列。我想將行轉換爲相同id的列,按照附圖對它們進行分組。列名對我來說並不重要,因爲我只需要每個id的值。

+---+---+---+---+-----+---+ 
| 1 | a | b | c | ... | x | 
+---+---+---+---+-----+---+ 
| 1 | d | e | f | ... | y | 
+---+---+---+---+-----+---+ 
| 2 | g | h | i | ... | z | 
+---+---+---+---+-----+---+ 
| 2 | j | k | l | ... | q | 
+---+---+---+---+-----+---+ 
| 3 | m | n | o | ... | w | 
+---+---+---+---+-----+---+ 
| 3 | p | q | r | ... | t | 
+---+---+---+---+-----+---+ 

+---+---+---+---+-----+---+---+---+---+-----+---+ 
| 1 | a | b | c | ... | x | d | e | f | ... | y | 
+---+---+---+---+-----+---+---+---+---+-----+---+ 
| 2 | g | h | i | ... | z | j | k | l | ... | q | 
+---+---+---+---+-----+---+---+---+---+-----+---+ 
| 3 | m | n | o | ... | w | p | q | r | ... | t | 
+---+---+---+---+-----+---+---+---+---+-----+---+ 
+0

如果MySQL是不是一個攔截器,你應該能夠得到使用PostgreSQL – FrankerZ

+0

此功能這種轉變稱爲旋轉並一直問並在SO上多次回答。鏈接的重複主題解釋了靜態和動態主題。在這種情況下,您可能需要使用min或max作爲聚合函數而不是計數。請注意,在應用程序代碼中執行這種轉換可能比在sql中更高效。 – Shadow

回答

1

不幸的是,如果您在表中有可變數量的id重複,則無法即時創建類似這樣的列。 可以使用組CONCAT得到相同的列到一個逗號分隔欄

Select Id, Group_Concat(Col1) As Col1, 
     Group_Concat(Col2) As Col2, 
     Group_Concat(Col3) As Col3, ... 
     Group_Concat(Coln) As Coln 
From table 
Group By Id