2012-09-26 69 views
1

我很難在SQL中創建一個month-> count select查詢。在SQL選擇中放置空格

基本上,我有一個條目列表,所有條目都有一個與它們相關的日期。我想要的最終結果是一個包含12行(每月一個)的列表,每行包含月份編號(1月份爲1,2月份爲2月份),以及有多少條目有那個月就是這個日期。事情是這樣的:

Month - Count 
1  - 12 
2  - 0 
3  - 7 
4  - 0 
5  - 9 
6  - 0 

我可以得到包含有大於0的計數個月的結果,但是如果一個月不包含任何條目,則不會創建行。我只是通過做

SELECT Month(goalDate) as monthNumber, count(*) as monthCount 
FROM goalsList 
WHERE Year(goalDate) = 2012 
GROUP BY Month(goalDate) 
ORDER BY monthNumber 

在此先感謝您的幫助!

+0

請你能詳細到指定的表結構? – Freelancer

+2

爲什麼你會期望一個不存在的行的結果 - 嘗試左對齊一個表,所有的月份 –

回答

2

嘗試這樣的事情,

SELECT a.monthNo, COUNT(b.goalDate) 
FROM (
     SELECT 1 monthNo UNION SELECT 2 monthNo 
      UNION 
     SELECT 3 monthNo UNION SELECT 4 monthNo 
      UNION 
     SELECT 5 monthNo UNION SELECT 6 monthNo 
      UNION 
     SELECT 7 monthNo UNION SELECT 8 monthNo 
      UNION 
     SELECT 9 monthNo UNION SELECT 10 monthNo 
      UNION 
     SELECT 11 monthNo UNION SELECT 12 monthNo 
    ) a LEFT JOIN goalsList b 
      ON a.monthNo = CAST(month(b.goalDate) as SIGNED) 
GROUP BY a.monthNo 
ORDER BY a.monthNo; 

當時的想法是在臨時表中創建的用於月份數記錄名單,並針對goalsList表加入它。 (假設OP沒有爲一個月的數字表)

SQLFiddle Demo

+1

我建議每個人都有一個數字表或tvf可用於這樣的用途。 –

+1

非常感謝:)我欣賞它 –

+0

@DavidUndy歡迎您:D –