【问题标题】:Create MySQL view using distinct values as columns使用不同的值作为列创建 MySQL 视图
【发布时间】:2026-01-20 16:35:01
【问题描述】:

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

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),但可以随着时间的推移而增加。是否可以创建这样的视图?如果是,怎么做?

非常感谢。

【问题讨论】:

    标签: mysql view distinct


    【解决方案1】:

    具有可变列数的结果集通常不是一个好主意,但是如果您真的想要这样做,那么您可以使用 GROUP BYMAXIF 的组合:

    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;
    

    视图会根据需要为您提供这些数据:

    日期 m1 m2 m3 2011-01-01 上线 下线 上线 2011-01-02 下线 下线 上线

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

    【讨论】:

    • 使用 MAX() 有什么意义?如果没有 MAX(),它不应该仍然工作吗?