2016-06-28 3 views
0

У меня есть данные, хранящиеся в базе данных MYSQL в следующем формате:Pivot данных SQL - группы строк в столбцах

+------------+------------+-----------+ 
| id  | field | value | 
+============+============+===========+ 
|  1  | first | Bob | 
+------------+------------+-----------+ 
|  1  | last  | Smith | 
+------------+------------+-----------+ 
|  2  | first | Jim | 
+------------+------------+-----------+ 
|  2  | last  | Jones | 
+------------+------------+-----------+ 

, и я хотел бы он вернулся следующим образом:

+------------+------------+-----------+ 
| id  | first | last | 
+============+============+===========+ 
|  1  | Bob  | Smith | 
+------------+------------+-----------+ 
|  2  | Jim  | Jones | 
+------------+------------+-----------+ 

Я знаю, что это кажется глупым способом хранения данных, но это просто простой пример того, что у меня действительно есть. Таблица отформатирована таким образом из плагина WordPress, и я хотел бы заставить его работать, не переписывая плагин.

Из того, что я читал, я не могу использовать PIVOT с mySql. Есть ли что-то подобное PIVOT, которое я могу использовать для достижения того, что я собираюсь сделать?

+0

Возможный дубликат [MySQL - строки в столбцы] (http://stackoverflow.com/questions/1241178/mysql-rows-to-columns) –

ответ

2

Попробуйте сводную запрос:

SELECT id, 
    MAX(CASE WHEN field = 'first' THEN value ELSE NULL END) AS first, 
    MAX(CASE WHEN field = 'last' THEN value ELSE NULL END) AS last 
FROM yourTable 
GROUP BY id 

Перейдите по ссылке ниже для запущенной демки:

SQLFiddle

+0

Работало отлично! Спасибо. –

1

Попробуйте это;)

select 
    id, 
    max(if(field='first', value, null)) as first, 
    max(if(field='last', value, null)) as last 
from yourtable 
group by id 

SQLFiddle DEMO HERE

+0

Кроме того, отлично работал. Благодаря! –

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