MySQL-行到列而不声明字段值的名称

时间:2018-10-02 11:22:22

标签: mysql sql

此线程提供了一个解决方案: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;
  

如何进行查询使事情成为可能?请帮忙。   谢谢!

0 个答案:

没有答案
相关问题