2014-01-24 386 views
0

有一個查詢,列出7天內每天的作業數量。 工作正常,但不包括0個結果。包含0值的SQL COUNT

我需要做什麼得到它包括0個結果。

select date_received, count(*) 
from calls with (nolock) 
where contract = 'BLAH' 
and date_received between DATEADD(day,-8,GETDATE()) AND GETDATE()-1 
group by date_Received 
order by date_received 

這個查詢產生6天的結果,第7天有0個調用,但那一天被包括在內。

+0

你有一個日曆表,即每個日期都有單行的表格? –

+0

您需要使用日曆表或類似的工具,並使用它執行'LEFT JOIN',其中'calls'表 – Lamak

+0

否,所有數據都在調用表中。 我只是計算每個特定日期的記錄數量。 以爲我可以在某處使用ISNULL。 – chenks

回答

3

如果你有一個日曆表,你可以這樣做:

SELECT A.[Date] date_received, 
     COUNT(*) N 
FROM dbo.Calendar A 
LEFT JOIN (SELECT * 
      FROM dbo.calls 
      WHERE contract = 'BLAH') B 
    ON A.[Date] = B.date_received 
WHERE A.[Date] >= DATEADD(DAY,-8,CONVERT(DATE,GETDATE()) 
AND A.[Date] <= DATEADD(DAY,-1,CONVERT(DATE,GETDATE())) 
GROUP BY A.[Date] 

如果沒有,你可以使用一個CTE爲您年曆表:

;WITH Calendar AS 
(
    SELECT DATEADD(DAY,-1*number,CONVERT(DATE,GETDATE())) [Date] 
    FROM master..spt_values 
    WHERE type = 'P' 
    AND number BETWEEN 1 AND 8 
) 
SELECT A.[Date] date_received, 
     COUNT(*) N 
FROM Calendar A 
LEFT JOIN (SELECT * 
      FROM dbo.calls 
      WHERE contract = 'BLAH') B 
    ON A.[Date] = B.date_received 
GROUP BY A.[Date]