大佬教程收集整理的这篇文章主要介绍了查询返回 count(*) 为零的行,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写一个 sql Server 查询,它也应该返回零计数记录。我知道聚合函数会忽略 NulL 值。
SELECT
DAY(job_start_datE) as day,count(app_ID) as execution
FROM job_application_details
WHERE
job_start_date >= DATEADD(day,-30,GETDATE())
and job_start_date <= getdate()
and app_ID = 51
group by DAY(job_start_datE);
以上查询返回如下结果:
| day | execution
-------+------+--------------
1 | 9 | 1
2 | 12 | 1
3 | 15 | 1
4 | 30 | 1
因为在其他日子里,表中没有记录,所以它不会以 0 计数返回它。因此,我想编写一个查询,返回 30 天的记录,包括执行次数为 0 的记录。
请帮忙解决这个问题。提前致谢。
这里的问题是您需要一个包含您期望的完整日期集的表,一个日历,以便您可以执行 LEFT JOIN。然后你可以这样写:
SELECT c.date,SUM(IIF(d.job_start_date IS NULL,1)) AS execution
FROM calendar c
LEFT JOIN job_application_details d
ON c.date = d.job_start_date
WHERE c.date betweeN DATEADD(day,-30,GETDATE()) AND GETDATE()
AND d.app_id = 51
GROUP BY c.date
如果您还没有将日历表加载到数据库中,本post 概述了一些创建日历表的简单方法。
,假设你的表每天都有数据——只是不是 app = 51,你可以使用条件聚合:
SELECT DAY(job_start_datE) as day,sum(cASE WHEN appid = 51 THEN 1 ELSE 0 END) as execution
FROM job_application_details
WHERE job_start_date >= DATEADD(day,GETDATE()) AND
job_start_date <= getdate()
GROUP BY DAY(job_start_datE);
否则,您需要一个日历表、计数表,或者使用递归 CTE 等方法生成日期。
以上是大佬教程为你收集整理的查询返回 count(*) 为零的行全部内容,希望文章能够帮你解决查询返回 count(*) 为零的行所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。