使用零

时间:2015-08-10 22:55:53

标签: vba ms-access count zero isnull

是的,已经有很多使用SQL中的Count和左连接来获得零值。但是,我使用Access,我无法让我的SQL命令返回任何零值。我尝试过的两个最有希望的解决方案是

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行中的Count,或者JOIN中的某个地方我可能有些错误。我包含了查询的其余部分(包括整个长期,复杂的where子句),以防万一有人可以看到为什么它可能会搞砸计数。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您的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;

答案 1 :(得分:0)

感谢那些提供解决方案的人,但最后我使用了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;

这为我提供了表格中的所有唯一日期以及运行计数,即使计数为零也是如此。