为什么这个IIF函数会产生#Error?

时间:2013-09-30 14:45:02

标签: ms-access

我的一个表有一个名为Cost的字段和一个名为Extra Cost的字段。为了得到Total Cost,我将它们与以下字段一起添加,它可以正常工作:

Total Cost: (Val(nz([Cost],"")))/100 + (Val(nz([Extra Cost],"")))/100

(我除以100,因为CostExtra Cost的存储没有小数点)

现在,记录可能会Cost = 0,Extra Cost> 0.但如果Cost = 0,我希望Total Cost也= 0.我想出了以下内容,但如果#Error = 0,则会产生Cost。如果Cost>正常工作0:

Total Cost: IIf([Cost]>0,((Val(nz([Cost],"")))/100+(Val(nz([Extra Cost],""))))/100,0)

基本上我在寻找:

If Cost = 0, Then Total Cost = 0
Else
If Cost > 0, Then Total Cost = Cost + Extra Cost

“真实”部分有什么问题?

以下是一些数据示例:

Cost    Extra Cost
100     2.5
250     1.5
150     2.5
null    2.75

1 个答案:

答案 0 :(得分:1)

根据您的描述,我认为您可以在添加2个值之后除以100,而不是在添加它们之前将每个值除以100。这不应该影响逻辑,但应该给你一个更简单的IIf表达式......这有望更容易诊断。

IIf
    (
        Val(Nz([Cost], "0")) > 0,
        (Val([Cost]) + Val(Nz([Extra Cost], "0"))) / 100,
        0
    )

在Access 2007中使用示例数据,我从以下查询中获取此结果集:

Cost Extra Cost Total Cost
100  2.5             1.025
250  1.5             2.515
150  2.5             1.525
     2.75                0

SELECT
y.Cost,
y.[Extra Cost],
IIf
    (
        Val(Nz([Cost], "0")) > 0,
        (Val([Cost]) + Val(Nz([Extra Cost], "0"))) / 100,
        0
    ) AS [Total Cost]
FROM YourTable AS y;

如果问题是[Total Cost]需要文本值,您可以使用CStr()IIf数值转换为字符串。

CStr(
    IIf
        (
            Val(Nz([Cost], "0")) > 0,
            (Val([Cost]) + Val(Nz([Extra Cost], "0"))) / 100,
            0
        )
    )
相关问题