首页 > 解决方案 > 将存储为行的名称值对转换为列

问题描述

我有一张如下表:

ID  | FieldName     | FieldValue
--------------------------------
01  | event_name    | Event Title
01  | event_cost    | 10.00
01  | event_loc     | Leeds
02  | event_name    | Another Event
02  | event_cost    | 15.00
02  | event_loc     | London

我想查询这个并返回结果如下:

Title           | Cost  | Location
------------------------------------
Event Title     | 10.00 | Leeds
Another Event   | 15.00 | London

最好的方法是什么?我曾尝试使用 SELECT 查询,但我只能返回一个字段值,而且我似乎无法加入它们。

标签: mysqlsqljoinselect

解决方案


您可以进行条件聚合:

select max(case when FieldName = 'event_name' then FieldValue end) as Title,
       max(case when FieldName = 'event_cost ' then FieldValue end) as Cost,
       max(case when FieldName = 'event_loc' then FieldValue end) as Location
from table t
group by id;

推荐阅读