我有一个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
查询的结果中动态设置它们。我该怎么做?
答案 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;