具有键/值对的MySQL表,获取键作为列名

时间:2014-04-14 11:44:19

标签: mysql sql

我有一个MySQL数据库,我可以在其中执行以下查询:

mysql> SELECT Name, Value from info WHERE ID = 110506;

+-------+-----------+
| Name  | Value     |
+-------+-----------+
| start | 228196    |
| stop  | 228318    |
| fwd   | 0         | 
+-------+-----------+
3 rows in set (0.00 sec)

我正在尝试构建一个结果为

的查询
+--------+--------+-----+
| start  | stop   | fwd |
+--------+--------+-----+
| 228196 | 228318 | 0   |
+------- +--------+-----+
1 row in set (0.00 sec)

我事先并不知道名称列中的名称是什么,因此我需要以某种方式从我的SELECT查询的结果中动态设置它们。我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以对列值使用CASE ... WHEN子句,并为结果集使用与列名相同的值。并且您必须应用聚合函数将结果汇总到一行。

以下示例使用MAX聚合函数来汇总结果。

select
    max( case `name` when 'start' then `value` end ) as `start`
  , max( case `name` when 'stop' then `value` end ) as `stop`
  , max( case `name` when 'fwd' then `value` end ) as `fwd`
from `table_name`
;

答案 1 :(得分:2)

试试这个

SELECT
    MAX(CASE WHEN name = 'start' THEN value END) AS `start`,
    MAX(CASE WHEN name = 'stop' THEN value END) AS `stop`,
    MAX(CASE WHEN name = 'fwd' THEN value END) AS `fwd`
FROM info
WHERE id = 110506;