2016-06-28 6 views
0

私は、次の形式でのMySQLデータベースに格納されたデータを持っている:ピボット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プラグインからこのようにフォーマットされており、プラグインを書き直すことなく動作させたいと思っています。

私が読んだところから、私はmySqlでPIVOTを使用することはできません。私が行っていることを達成するために使用できるPIVOTに似たものがありますか?

+0

[MySQL - Rows to Columns]の重複している可能性があります(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

Worked great!本当にありがとう。 –

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

また、素晴らしい仕事をしました。ありがとう! –