如果值不为null,如何获取行计数?

时间:2009-08-17 12:35:52

标签: ms-access

使用Access 2003

EmpID Value1 Value2

001 100 
001       300
001 200   400
001 300   
001       250
001 200   400
002       100   
002 100   200
003 500   100
003
003 700
003

所以......,

我想计数(value1)和Count(value2)不等于null。

预期产出。

EmpID Value1 Value2

001     4      4
002     1      2
003     2      1

所以......,

如果行值不等于null,如何计算行值?

需要查询帮助。

4 个答案:

答案 0 :(得分:2)

似乎有用吗?

SELECT Table1.Field1, Count(Table1.Field2) AS CountOfField2, Count(Table1.Field3) AS CountOfField3
FROM Table1
GROUP BY Table1.Field1;

在您的示例中,003是2和1,而不是1和0

结果是:

 Field1 CountOfField2   CountOfField3
 1         4                4
 2         1                2
 3         2                1

如果字段为NULL则似乎有效

答案 1 :(得分:1)

如果你想要浏览整个表格

SELECT
    SUM (IIF(value1 IS NULL, 0, 1)) as NumNonNullValue1,
    SUM (IIF(value2 IS NULL, 0, 1)) as NumNonNullValue2

FROM Employee

但如果您希望每个员工ID为Null,那么

SELECT
    EmpID,
    SUM (IIF(value1 IS NULL, 0, 1)) as NumNonNullValue1,
    SUM (IIF(value2 IS NULL, 0, 1)) as NumNonNullValue2

FROM Employee

GROUP BY EmpID

当然,有时仅通过EmpId对查询很有用,但不适用于显示。您需要名称,因此我们添加名称字段

SELECT
    EmpID,
    EmployeeName,
    SUM (IIF(value1 IS NULL, 0, 1)) END as NumNonNullValue1,
    SUM (IIF(value2 IS NULL, 0, 1)) END as NumNonNullValue2

FROM Employee

GROUP BY EmpID, EmpoyeeName

答案 2 :(得分:0)

我想我明白了,但你可能需要稍微调整一下...... Access数据库引擎的IIF()函数进行测试,如果为TRUE,则返回值1,否则返回值为0.

select 
      EmpID, 
      sum( IIF( IsNull( Value1 ), 0, 1 )) as Fld1WithValues, 
      sum( IIF( IsNull( Value2 ), 0, 1 )) as Fld2WithValues 
   from 
      Table1 
   group by 
      EmpID;

因此,即使您可能有6个EmpID 1条目,但是2个为NULL,通过执行0或1的SUM(),所有记录将分别计入每个字段,并且在此情况下不会丢失任何内容或者值1或值2的值为空。他们按照自己的OWN值进行测试。

答案 3 :(得分:0)

这是特定于访问的答案,但这是原始问题的背景。您想要计算非Null值的发生率,而不是记录的数量。有几个答案使用IIf()来测试Null,但是你可以用IsNull()和Abs()更容易地做到这一点:

  SELECT EmpID, Abs(Sum(Not IsNull([Value1]))) As Value1Count, 
     Abs(Sum(Not IsNull([Value2]))) As Value2Count
  FROM MyTable
  GROUP BY EmpID

这对我来说比使用IIf()简单得多。