2013-04-25 35 views
0

我有一个表列日期;它包含几个月的记录,但不是连续的。 要查看哪些月份存在(现在意味着在特定月份中有一个或多个记录),我尝试进行概述。它应该是这样的:移调与MySQL分组日期

2013 Jan Feb Mar - May Jun // etc 
2012 Jan - - Apr May - // etc 

我可以得到所有今天的第一天,但​​我坚持如何转置。如果我这样做:

SELECT 
    IF (d = 1, month ,'-') AS Jan, 
    IF (d = 2, month ,'-') AS Feb, 
    IF (d = 3, month ,'-') AS Mar 
FROM 
    (SELECT 
     MONTH(date) AS d, 
     DATE_FORMAT(date, '%Y-%m-01') AS month 
    FROM 
     table 
    GROUP BY 
     month 
    ORDER BY 
     month) m 
GROUP BY YEAR(month)    

如果给出了这样的结果:

Jan Feb Mar 
- - Mar 
- Feb - 

虽然它应该给:

Jan Feb Mar 
-  - Mar 
Jan Feb Mar 

回答

0

这将让你做没有一个子查询:

SELECT 
    MAX(CASE WHEN MONTH(date) = 1 THEN 'Jan' ELSE '-' END) AS Jan, 
    MAX(CASE WHEN MONTH(date) = 2 THEN 'Feb' ELSE '-' END) AS Feb, 
    MAX(CASE WHEN MONTH(date) = 3 THEN 'Mar' ELSE '-' END) AS Mar, 
    MAX(CASE WHEN MONTH(date) = 4 THEN 'Apr' ELSE '-' END) AS Apr, 
    MAX(CASE WHEN MONTH(date) = 5 THEN 'May' ELSE '-' END) AS May, 
    MAX(CASE WHEN MONTH(date) = 6 THEN 'Jun' ELSE '-' END) AS Jun, 
    ... and so on through December 
FROM table 
GROUP BY YEAR(date) 
+0

太棒了,我清楚地思考错误的方向。谢谢! – Lennart 2013-04-25 21:19:02