MySQL使用垂直数据选择多个字段

时间:2012-07-02 16:38:31

标签: mysql

我有一个MySQL数据库,其中表设置为以垂直方式存储数据:

Userid -- Field -- Data
186       30       New York
186       31       Phone
186       32       Delta

187       30       Los Angeles
187       31       Website
187       32       US Air

我可以选择列,如果它们已经是水平但希望能够组织输出,看起来像这样:

Userid -- Data30   --   Data31 -- Data32
186       New York      Phone     Delta
187       Los Angeles   Website   US Air

如何说“选择DATA30显示此列,但仅限于FIELD等于30”?

2 个答案:

答案 0 :(得分:1)

这是一个经典的数据透视表。使用MAX()聚合和GROUP BYCASE一起使用,您可以将行转换为列。只有Field的值有限并且定义明确时,这才能正常工作。

MAX聚合的目的只是为每个值消除NULL,因此每Userid只有一行,只有一个值为非空,它们会折叠分成一排。

SELECT
  Userid,
  MAX(CASE WHEN Field = 30 THEN Data ELSE NULL END) AS Data30,
  MAX(CASE WHEN Field = 31 THEN Data ELSE NULL END) AS Data31,
  MAX(CASE WHEN Field = 32 THEN Data ELSE NULL END) AS Data32
FROM yourtable
GROUP BY Userid

答案 1 :(得分:0)

试试这个:

select Userid, 
if(Field=30,Data,null),
if(Field=31,Data,null),
if(Field=32,Data,null) 
from table1
group by Userid;