使用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,如何计算行值?
需要查询帮助。
答案 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()简单得多。