2013-04-25 34 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