使用不同的值作为列创建MySQL视图

时间:2011-01-30 09:27:04

标签: mysql view distinct

我已经搜索了一段时间,无法找到问题的答案。我有一张看起来像这样的表:

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  

“名称”列下的值不同且具有固定数量的值,例如20个不同的值(m1 ... m20),但随着时间的推移可以增加。是否可以创建这样的视图?如果有,怎么样?

非常感谢。

1 个答案:

答案 0 :(得分:3)

具有可变列数的结果集通常是个坏主意,但是如果真的想要这样做,那么您可以使用GROUP BYMAX的组合和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

请注意,无法创建具有可变列数的视图,因此每次列数更改时都必须重新创建视图。