2013-03-14 131 views
2

我有這樣的MS SQL 2005查詢:MSSQL 2005查詢組日期 - 甚至沒有記錄的日期?

SELECT 
    DATEDIFF(dd, getdate(), CreatedOn) as Day, 
    COUNT(CreatedOn) as 'Active Cases' 
FROM 
    [dbo].[IncidentBase] 
WHERE 
    (StatusCode != 6 AND StatusCode != 5) 
    AND (CaseTypeCode = '200000' OR CaseTypeCode = '200005' OR CaseTypeCode = '200006') 
GROUP BY 
    DATEDIFF(dd, getdate(), CreatedOn) 
ORDER BY 
    Day DESC 

,並返回這樣的事情:

-1 10 
-2 6 
-5 4 
-7 8 

我真的想它是這樣的:

-1 10 
-2 6 
-3 0 
-4 0 
-5 4 
-6 0 
-7 8 

(之間插入零日期沒有記錄)

我該怎麼做?

非常感謝提前!

回答

2

嘗試外部連接的子查詢返回的所有日期

SELECT table_cal.day_diff as "Day", 
    COALESCE(table_count.base_count,0) as "Active Cases" 
FROM 
(SELECT DISTINCT DATEDIFF(dd, getdate(), ibase.CreatedOn) as day_diff 
    FROM [dbo].[IncidentBase] ibase) table_cal 
LEFT OUTER JOIN 
(SELECT DATEDIFF(dd, getdate(), ibase.CreatedOn) as day_diff, 
    COUNT(ibase.CreatedOn) as base_count 
    FROM [dbo].[IncidentBase] ibase 
    WHERE ibase.StatusCode NOT IN (5,6) AND ibase.CaseTypeCode IN ('200000','200005','200006') 
    GROUP BY DATEDIFF(dd, getdate(), ibase.CreatedOn)) table_count 
ON (table_cal.day_diff = table_count.day_diff) 
ORDER BY table_cal.day_diff DESC 

背後的想法很簡單。您需要一個子查詢來生成現有日期的列表,另一個用於生成結果值。然後你外連接並且用0替換空值。

+0

謝謝你的回答。雖然不是很有效 - 它只是將「活動案例」與10倍相乘。請您仔細檢查一下? – user1281991 2013-03-14 08:07:41

+0

我已經更新了它。由於我沒有樣本數據,我無法真正檢查 – 2013-03-14 08:18:29

+0

我非常感謝您的努力,我認爲它現在非常接近。請參閱:http://gratisupload.dk/billede/thumb/693353/full/ – user1281991 2013-03-14 08:33:17