2011-01-30 62 views
2

我搜索了一段时间并找不到解决问题的答案。我有一个表,看起来像这样:使用不同的值作为列创建MySQL视图

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

非常感谢。

回答

3

结果集列的变量数量通常是一个坏主意,但是如果你真的想这样做,那么你可以使用的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; 

视图会给你这个数据,你想:

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

请注意,这是不可能创造与列的可变数量的视图,所以你将不得不重新创建在v每当列数发生变化时查看。

+0

感谢您的指点。 – kelly 2011-01-30 10:23:15