1

我有一个 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”?

4

2 回答 2

1

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

聚合的目的MAX只是消除NULL每个值,因此不是每行Userid只有一个非空值的 3 行,而是将它们折叠成一行。

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
于 2012-07-02T16:42:48.437 回答
0

试试这个:

select Userid, 
if(Field=30,Data,null),
if(Field=31,Data,null),
if(Field=32,Data,null) 
from table1
group by Userid;
于 2012-07-02T16:47:30.167 回答