程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了查询返回 count(*) 为零的行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决查询返回 count(*) 为零的行?

开发过程中遇到查询返回 count(*) 为零的行的问题如何解决?下面主要结合日常开发的经验,给出你关于查询返回 count(*) 为零的行的解决方法建议,希望对你解决查询返回 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,请注明来意。