2017-03-19 85 views
0

我需要幫助創建一個查詢,該查詢將顯示月份的名稱,即使該月沒有任何活動。MySQL顯示所有月份

我只從一個表中獲取我的數據。

| apptID | apptType  |  Date | 
|----------------------------------------| 
| 1  | Implementation | 2017-03-19 | 
| 2  | Meeting   | 2017-03-01 | 
| 3  | Meeting   | 2017-04-04 | 

等等

我能夠創建一個查詢,顯示約會的總數(按類型,每月),但它並不表明沒有活動的月份。

這是我的代碼:

SELECT DATE_FORMAT(appointment.date, '%M') AS 'Month', 
SUM(CASE WHEN description = 'Meeting' THEN 1 ELSE 0 END) AS 'Meeting', 
SUM(CASE WHEN description = 'Consultation' THEN 1 ELSE 0 END) AS 'Consultation', 
SUM(CASE WHEN description = 'Implementation' THEN 1 ELSE 0 END) AS 'Implementation', 
SUM(CASE WHEN description = 'Follow-up' THEN 1 ELSE 0 END) AS 'Follow-up' 
FROM appointment GROUP BY MONTH(date) 

Result

我想保持這種相同的格式(記錄是由月)

謝謝

回答

0

我想創建一個第二隻有幾個月的表格,然後是left join。遺憾的是,答案是沒有更詳細的 - 移動設備,這是一種痛苦在寫這篇...

+0

感謝您的回覆。但是我無法創建只有月份信息的表格並進行左連接。 我在這裏看到了一個解決方案(https://www.daniweb.com/programming/databases/threads/334766/select-query-to-results-all-12-months-even-if-data-not-exist ),但我不知道如何將它與我想要創建的其他四列進行整合。 謝謝你,雖然 – afrocode

1

你可以列出一個子查詢的幾個月from子句中:

SELECT m.mon, 
     SUM(a.description = 'Meeting') AS Meeting, 
     SUM(a.description = 'Consultation') AS Consultation, 
     SUM(a.description = 'Implementation') AS Implementation, 
     SUM(a.description = 'Follow-up') AS Followup 
FROM (SELECT 1 as mon UNION ALL 
     SELECT 2 UNION ALL 
     SELECT 3 UNION ALL 
     SELECT 4 
    ) m LEFT JOIN 
    appointment a 
    ON MONTH(a.date) = m.mon 
GROUP BY m.mon; 

注意事項:

  • 這使用一個計數值的簡寫。 MySQL將一個布爾表達式作爲1來表示true,將0作爲false。
  • 不要將單引號放在列別名周圍。它們只能用於字符串和日期常量。
  • 當你使用幾個月的時候,你應該考慮一年(儘管我沒有對查詢做出這種改變)。
  • 您可以根據需要爲子查詢添加更多月份。
+0

這個作品!非常感謝! – afrocode