我已经搜索了一段时间,无法找到问题的答案。我有一张看起来像这样的表:
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),但随着时间的推移可以增加。是否可以创建这样的视图?如果有,怎么样?
非常感谢。
答案 0 :(得分:3)
具有可变列数的结果集通常是个坏主意,但是如果真的想要这样做,那么您可以使用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
请注意,无法创建具有可变列数的视图,因此每次列数更改时都必须重新创建视图。