2016-04-19 34 views
0

多次連接後,我有原始結果。行列轉換

+----------------------------------------------------------------------+ 
| Results                | 
+----+----------+-------------+----------+-----------+-----------------+ 
| id | group_id | question_id | question | answer_id | answer | input | 
+----+----------+-------------+----------+-----------+-----------------+ 
| 1 | 10001 | 1   | How old | 1   | 25  | NULL | 
| 2 | 10001 | 2   | What like| 3   | Cola | NULL | 
| 3 | 10001 | 2   | What like| 4   | Other | HotDog | 
| 4 | 10001 | 3   | City  | 5   | NYC | NULL | 
| 5 | 10001 | 4   | Name  | 7   | Other | Alex | 
| 6 | 10002 | 1   | How old | 1   | 25  | NULL | 
| 7 | 10002 | 2   | What like| 6   | Candy | NULL | 
| 8 | 10002 | 3   | City  | 8   | LA  | NULL | 
| 9 | 10002 | 4   | Name  | 7   | Other | Roman | 
+----+----------+-------------+----------+-----------+--------+--------+ 

但是現在我想通過group_id在「單行視圖」中看到它。 如:

+----+----------+-------------+----------+-----------+ 
| id | How Old | What like | City  | Name  | 
+----+----------+-------------+----------+-----------+ 
| 1 | 25  | Cola,HotDog | NYC  | Alex  | 
| 2 | 25  | Candy  | LA  | Roman  | 
+----+----------+-------------+----------+-----------+ 

我不`噸知道正常GROUP_BY/CONCAT建設爲。我必須做什麼?

+0

這是一個數據透視查詢,而且mysql不支持它們。解決方法變得非常快,非常難看。你最好在客戶端代碼中進行轉換。 –

回答

0
SET @i := 1; 
SELECT @i := @i + 1 AS `id` 
, GROUP_CONCAT(CASE WHEN question = 'How old' THEN answer ELSE NULL END) AS `How Old` 
, GROUP_CONCAT(CASE WHEN question = 'What like' THEN IF(answer='Other', input, answer) ELSE NULL END) AS `What like` 
, .... 
FROM theTable 
GROUP BY group_id 
; 

group_concat忽略空值,僅當它接收的值爲空時才返回null。對於CASE WHEN THEN ELSE END聲明,您可以很容易地使用IF(,,),就像在「其他」檢查中使用的一樣;但是CASE更便攜(MS SQL Server只是最近增加了對這些IF的支持)。

+0

男人,你太棒了!它不適合我!謝謝 – xCEZAREx