Создать представление MySQL, используя разные значения в виде столбцов - PullRequest
2 голосов
/ 30 января 2011

Я долго искал и не могу найти ответ на свою проблему. У меня есть таблица, которая выглядит так:

date      name   status  
2011-01-01  m1   online  
2011-01-01  m2   offline  
2011-01-01  m3   online  
2011-01-02  m1   offline  
2011-01-02  m2   offline  
2011-01-02  m3   online  

Я хочу создать вид, который будет выглядеть следующим образом:

date         m1     m2       m3  
2011-01-01  online  offline  online  
2011-01-02  offline offline  online  

Если значения в столбце «name» различны и имеют фиксированное количество значений, скажем, 20 различных значений (m1 ... m20), но их можно увеличивать с течением времени. Можно ли создать такой вид? если да, то как?

Большое спасибо.

1 Ответ

3 голосов
/ 30 января 2011

Результирующие наборы с переменным числом столбцов, как правило, плохая идея, однако, если вы действительно хотите сделать это, вы можете использовать комбинацию GROUP BY, MAX и IF:

CREATE VIEW yourview AS
SELECT
    date,
    MAX(IF(name = 'm1', status, NULL)) m1,
    MAX(IF(name = 'm2', status, NULL)) m2,
    MAX(IF(name = 'm3', status, NULL)) m3
FROM yourtable
GROUP BY date;

Представление предоставит вам эти данные, как вы хотели:

date        m1       m2       m3    
2011-01-01  online   offline  online
2011-01-02  offline  offline  online

Обратите внимание, что создать невозможнопредставление с переменным числом столбцов, поэтому вам придется заново создавать представление при каждом изменении количества столбцов.

...