我有一个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”?
答案 0 :(得分:1)
这是一个经典的数据透视表。使用MAX()
聚合和GROUP BY
与CASE
一起使用,您可以将行转换为列。只有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;