2016-04-19 5 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

Смежные вопросы