使用零访问 SQL 计数函数

Access SQL Count function with zeros

是的,已经有很多关于在 SQL 中使用 Count 以及左连接来获取零值的内容。但是,我使用的是 Access,我无法将 SQL 命令设为 return 任何零值。我尝试过的两个最有希望的解决方案是

SELECT RQ.ServiceDate, NZ(COUNT(RQ2.Run), 0) AS RunCountForHour
From RealQuery As RQ
Left Join RealQuery As RQ2 ON  (RQ.Run = RQ2.Run) AND (RQ.ServiceDate = RQ2.ServiceDate)
WHERE RQ.ProviderId < 12 AND RQ.RunBeginTime <= 7200 And RQ.RunEndTime >= 7200 AND RQ.RunBeginTime <> 0 AND (RQ.ServiceDate BETWEEN #1/1/2015# AND #4/30/2015#) AND RQ.ServiceDate NOT IN (#1/19/2015#)
GROUP BY RQ.ServiceDate;

SELECT RQ.ServiceDate, COUNT(IIF(ISNULL(RQ2.Run), 0, RQ2.Run)) AS RunCountForHour
From RealQuery As RQ
Right Join RealQuery As RQ2 ON  (RQ.Run = RQ2.Run) AND (RQ.ServiceDate = RQ2.ServiceDate)
WHERE RQ.ProviderId < 12 AND RQ.RunBeginTime <= 7200 And RQ.RunEndTime >= 7200 AND RQ.RunBeginTime <> 0 AND (RQ.ServiceDate BETWEEN #1/1/2015# AND #4/30/2015#) AND RQ.ServiceDate NOT IN (#1/19/2015#)
GROUP BY RQ.ServiceDate;

但是这些选项都不会输出任何 运行 计数为零的数据。基本上,重要的部分应该来自第一个 SELECT 行中的计数,或者 JOIN 中的某个地方我可能有问题。不过,我包括了查询的其余部分(包括整个冗长、复杂的 where 子句),以防万一有人看到它可能会搞砸计数的原因。在此先感谢您的帮助。

您的 WHERE 子句要求 RQ.RunBeginTime 成为 <> 0,这首先需要包含 RQ.RunBeginTime 的行存在。因此,您的 WHERE 子句排除了您想要显示为零的任何行。尝试将一些条件移动到 JOIN ON 子句。没有测试数据我不能确定,但​​是试试:

SELECT RQ.ServiceDate, NZ(COUNT(RQ2.Run), 0) AS RunCountForHour
From RealQuery As RQ
Left Join RealQuery As RQ2 ON  (RQ.Run = RQ2.Run) AND (RQ.ServiceDate = RQ2.ServiceDate) AND RQ.ProviderId < 12 AND RQ.RunBeginTime <= 7200 And RQ.RunEndTime >= 7200 AND RQ.RunBeginTime <> 0 AND (RQ.ServiceDate BETWEEN #1/1/2015# AND #4/30/2015#) AND RQ.ServiceDate NOT IN (#1/19/2015#)
GROUP BY RQ.ServiceDate;

感谢那些提供解决方案的人,但最后我还是使用了 SUM 功能和 IIF(我在 Access 中工作)而不是 COUNT。最终正确输出的代码如下:

SELECT RQ.ServiceDate, SUM(IIF((RQ.RunBeginTime <= 7200 AND RQ.RunEndTime >= 7200
AND RQ.RunBeginTime <> 0), 1, 0)) AS RunCountForHour
FROM RealQuery AS RQ WHERE RQ.ProviderId < 12 AND 
(RQ.ServiceDate BETWEEN #1/1/2015# AND #4/30/2015#) AND RQ.ServiceDate NOT IN (#1/19/2015#)
GROUP BY RQ.ServiceDate;

这为我提供了 table 中的所有唯一日期以及 运行 计数,即使计数为零。