此线程提供了一个解决方案:MySQL - Rows to Columns。但是我觉得它不是动态的。我的意思是,如果人们将添加一个尚未声明的新字段值怎么办?因此,开发人员需要再次更改查询才能使其正常工作吗?我不要那样的东西我希望查询能够持续下去,即使有很多其他字段值也是如此。 以下是提供的步骤之一。
create view history_extended as (
select
history.*,
case when itemname = "A" then itemvalue end as A,
case when itemname = "B" then itemvalue end as B,
case when itemname = "C" then itemvalue end as C
from history
);
select * from history_extended;
+--------+----------+-----------+------+------+------+
| hostid | itemname | itemvalue | A | B | C |
+--------+----------+-----------+------+------+------+
| 1 | A | 10 | 10 | NULL | NULL |
| 1 | B | 3 | NULL | 3 | NULL |
| 2 | A | 9 | 9 | NULL | NULL |
| 2 | C | 40 | NULL | NULL | 40 |
+--------+----------+-----------+------+------+------+
比方说,添加了一个新值-“ D”。在查询中选择D值的主要解决方案是更改查询并添加一行:case when itemname = "D" then itemvalue end as D
。如果添加了另一个值?它永远不会结束。我需要这样的东西:
SELECT CASE WHEN itemname IS anything THEN itemvalue END AS anything FROM history;
如何进行查询使事情成为可能?请帮忙。 谢谢!