SQL COUNT包含0个值

时间:2014-01-24 15:48:29

标签: sql sql-server count

有一个查询,列出7天内每天的工作量。 工作正常,但不包括0结果。

我需要做什么让它包括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次调用,但会包含该日期。

1 个答案:

答案 0 :(得分: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]