在计算每天的记录数时,如何包含零记录的天数?

时间:2018-05-01 18:47:54

标签: sql

我有一个查询告诉我每天创建了多少条记录,但如果一天没有创建记录,则查询不会列出日期和零金额。

Example

如何包含这些日期?

SELECT Convert(VARCHAR, CreatedDate, 101) as "Date", count(result_ID) as "Results"
FROM Results
WHERE CreatedDate >=dateadd(day,datediff(day,0,GetDate())- 90,0)
AND Verified = 1
GROUP BY Convert(VARCHAR, CreatedDate, 101)
Order by "Date" desc

2 个答案:

答案 0 :(得分:1)

好吧,我有答案,但你不会喜欢它。我最终要做的是在接下来的十年(或100年或其他)中每天预先填充一个日历表,并从中将LEFT OUTER JOIN连接到您的数据表。这样你每天都有一行,你可以在你的查询中找到你的结果ISNULL(0)。

这是我们在我以前的公司必须要做的解决方案,似乎被黑了但它确实有效并且很容易排除故障。我们尝试制作动态数据集的任何其他内容,非常聪明的SQL,UNION多个数据集等等,最后都遇到了麻烦,只是觉得过于复杂。这个解决方案很简单。

以下是执行日历表的代码: How to create a Calendar table for 100 years in Sql

答案 1 :(得分:0)

如果您没有日历表,则可以使用递归查询

with cte as (
    select MIN(date) mndt, MAX(date) mxdt
    from Results
    union all
    select DATEADD(DAY, 1, mndt) mndt, mxdt 
    from cte c
    where mndt < mxdt
)
select c.mndt as date,
       (select count(result_ID) from Results where date = c.mndt) as Results
from cte c;