新西兰和 IIF 的替代品(为空)
本文关键字:为空 替代品 IIF 新西兰 | 更新日期: 2023-09-27 18:31:43
我在 Access 中有一个查询,其中一个字段包含一个子查询,从相关表中返回特定字段的总和。子查询的结果用于主查询中的进一步计算。
这在 VB.Net(C# 就可以)中使用 ADO.Net 的自制报告应用程序中。查询存储在 Access 中的表中,以便我们更正小错误或添加与数据相关的临时功能,而无需再次发布应用程序。
问题是子查询可能不返回任何结果 (null)。此外,计算中使用的空值也将返回空值。因此,如果需要,我需要将 null 值替换为 0。我添加了NZ(subquery, 0)
,但 ADO.Net 抛出以下异常:
Undefined function 'NZ' in expression
我了解到不可能在 ADO.Net 中使用VBA函数,因为它是Access.Application对象的一部分。
我还考虑使用 IIF(subquery Is Null, 0, subquery)
,但这会迫使我复制子查询,并强制 Access 执行子查询两次(可能)。由于子查询相当复杂(主查询也是如此),我想避免这种情况,至少为了可读性,如果不是性能的话。
有没有其他方法可以用另一个值替换 null 值,或者确保我的子查询始终返回非 null 总和,即使没有匹配的记录?
抱歉,没有其他办法。最干净的方法将是
Iif(IsNull([Data]), 0, [Data])
NZ 是特定于 Access 代码库的函数,因此您将无法使用它。
试试这个:
int? x = null;
// Set y to the value of x if x is NOT null; otherwise,
// if x == null, set y to -1.
int y = x ?? -1;
若要了解详细信息,请参阅微软帮助
尝试使用 ?? 如下所示:
double? nullableVar=null;
double nonNullableVar;
nonNullableVar = (nullableVar ?? 0);
看看我的自定义函数 ez:表达式中的未定义函数 'Nz'。在这里:
Public Function ez(ByVal vVal1 As Variant, Optional ByVal vVal2 As Variant = 0) As Variant
If VBA.IsNull(vVal1) Or VBA.Len(vVal1) = 0 Then
ez = vVal2
Else
ez = vVal1
End If
End Function
如您所见,它比原始函数更进一步,因为它不仅考虑第一个值为 null 的第二个值,而且还考虑它是否为空的值
此外,默认返回值为 0,而 Nz 为空字符串。