В этом потоке было предусмотрено решение: MySQL - строки в столбцы .Все же я чувствовал, что это не динамично.Я имею в виду, что если люди добавят новое значение поля, которое не было объявлено?Таким образом, разработчик должен изменить запрос снова, чтобы он работал?Я не хочу что-то подобное.Я хочу, чтобы запрос продолжался, даже когда есть много дополнительных значений поля.Ниже приведена одна из процедур, представленных в качестве ответа.
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;
Как сделать запрос, который сделает это возможным?Пожалуйста помоги.Спасибо!