2014-01-24 346 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]