我有一个查询告诉我每天创建了多少条记录,但如果一天没有创建记录,则查询不会列出日期和零金额。
如何包含这些日期?
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
答案 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;