2012-10-31 37 views
2

我有一個非常簡單的表在這裏:SQL加一個月沒有日曆表的查詢


表1
ID
日期1
日期2
DATE3


我要按月份和ID彙總數據,以便查詢結果出來像這樣:表1的


查詢結果
ID

從不爲空從本月
計數日期2的,這不是空從
計數DATE3月份 計數日期1的那個月不是空的


我目前有這個問題低於RY僅依賴於被指定到什麼@month拉1個月:

Select ID, @month as [Month] 
Sum((Case When Month(Date1)[email protected] then 1 else 0 END)) as [Date1 Count], 
Sum((Case When Month(Date2)[email protected] then 1 else 0 END)) as [Date2 Count], 
Sum((Case When Month(Date3)[email protected] then 1 else 0 END)) as [Date3 Count], 
From Table1 
Group by ID 

但我想拉所有12個月,但是數據庫沒有一個月表或萬年曆錶,我該怎麼創建一個包含每個ID的全部12個月的查詢,並獲取Date1,Date2和Date3的相應月度計數?順便說一句,很多條目的某個日期是空的,例如Date1和Date3 =空,而Date2 = '01/01/2008'。提前致謝!

+1

你關心的一年或者,您想要將「01/01/2008」與「01/01/2012」一起彙總,例如? – mellamokb

回答

1

由於只有12個月,這將永遠不會改變,這是很簡單的使用CTE或子查詢,生成當月號:

;with M as (
    select 1 as month union 
    select 2 union 
    select 3 union 
    select 4 union 
    select 5 union 
    select 6 union 
    select 7 union 
    select 8 union 
    select 9 union 
    select 10 union 
    select 11 union 
    select 12 
) 
Select ID, M.Month, 
Sum((Case When Month(Date1)=M.Month then 1 else 0 END)) as [Date1 Count], 
Sum((Case When Month(Date2)=M.Month then 1 else 0 END)) as [Date2 Count], 
Sum((Case When Month(Date3)=M.Month then 1 else 0 END)) as [Date3 Count] 
From M,Table1 
Group by ID,M.month 

演示:http://www.sqlfiddle.com/#!3/19ed6b/1

+0

非常感謝!這很好用!一年是好的我想我會使用一個WHERE並指定所有三個日期的年份。但是如果我想把它作爲結果的一部分,我會做同樣的工會組織嗎? 順便說一句,這是否有任何顯着影響的性能比使用月表? – user1789630

+0

您是否遇到性能問題?如果不是這樣,我不會擔心這個小桌子。 – mellamokb