2011-07-11 46 views
0

我有一个交叉表查询将计数Patient_ID作为值。Nz()不能在MS Access中工作

Total = Nz(Count(Research.Patient_ID))+0 

我也曾尝试:

Total = Nz(Count(Research.Patient_ID) 

和....

​​

等NZ()只有当至少一个值不为空的作品。但是,如果它们都是空的,而不是看到所有的0,我什么都看不到。

这是有问题的,因为我使用这些查询作为子查询。主要查询从这个(和其他类似的)中获取值并将它们加在一起。不幸的是,如果其中一个子查询完全为空,那么总和实际上变为空,无论是否应该。

例如:

subquery1: Nz(Count(Research.Patient_ID))+0 

subquery2: Nz(Count(Research.All_ID))+0 

mainquery: subquery1 + subquery2 


if subquery1 = 4, and subquery2 = Null... 

mainquery = subquery1 + subquery2 
mainquery = Null 

时真的...

mainquery = 4 

请帮助。

+0

您能发表最少的完整查询和示例数据吗? – Jacob

+3

你的Nz例子看起来都不错 - 他们是否错别字?它应该是Nz(表达式,值),所以Nz(Count(Research.Patient_ID),0) - 你的两个例子有不平衡的parens,第一个没有实际值。 –

回答

2

在此查询,主查询产生数的总和在两个子查询中确定。这是你在追求什么?

SELECT 
    Nz(s1.CountOfPatient_ID,0) + Nz(s2.CountOfAll_ID,0) 
FROM 
    [SELECT Count(Patient_ID) AS CountOfPatient_ID FROM Research]. AS s1, 
    [SELECT Count(All_ID) AS CountOfAll_ID FROM Research]. AS s2 
2

nz(null, null)+0将永远是null作为null + anythingnull

如果nz()可以返回null,只是采用另一种nz()来处理它;

SELECT ... nz(nz([value1], [value2]), 0) 
+0

null +任何事物都是UNKNOWN(逻辑值而不是数据值)......哦,等等,这是'ms-access',它的null与SQL的null不一样;) – onedaywhen

+1

这是怎么回事?也就是说,“Access的”Null与SQL不一样(抛开Access没有Null,但Jet/ACE SQL和VBA这样的事实)? –

0

你应该更加详细一些,并发布你的主要查询的确切部分,两个计数加起来。

到目前为止,我只能猜测,你需要添加NZ()到主查询表达式,像(使用伪代码)

mainquery = NZ(subquery1, 0) + NZ(subquery2, 0)