计算字段(IIF)

时间:2014-12-09 16:49:54

标签: ms-access calculated-field iif

好吧,我正在为我的大学课程设计一个数据库。我在查询中的计算字段上苦苦挣扎。计算字段由表达构建器的IIF表达式组成。主要问题是,计算字段有效,但是,由于我在IIF的错误部分中放置了“Not Applicable”,它仍然是#Error?以下是我的IIF!

IIf([Quantity]=20,[Total After Discount]*0.95,
    IIf([Quantity]=50,[Total After Discount]*0.925,
        IIf([Quantity]=100,[Total After Discount]*0.9,
            IIf([Quantity]>=200,[Total After Discount]*0.875,"Not Applicable."))))

有任何帮助/意见或建议吗?

2 个答案:

答案 0 :(得分:0)

此查询计算总AFTER折扣。因此,它的输入应该是BEFORE折扣总额。你可能正在做这样的事情:

SELECT IIf([Quantity]=20,[Total After Discount]*0.95,...) AS [Total After Discount]
FROM ...

所以在这个表达式中[Total After Discount]指的是自己,这是不可能的。将其更改为

SELECT IIf([Quantity]=20,[Total Before Discount]*0.95,...) AS [Total After Discount]
FROM ...

如果[Total After Discount]是另一个查询或表中的列,并且您希望再次在结果中使用相同的列名,则可以通过按表或查询名称限定列名来执行此操作:

SELECT
    IIf([Quantity]=20, MyTable.[Total After Discount]*0.95, ...)
        AS [Total After Discount]
FROM MyTable

这消除了不允许的递归。


但你的逻辑是否真的正确?不应该是:

IIf([Quantity]>=200,[Total Before Discount]*0.875,
    IIf([Quantity]>=100,[Total Before Discount]*0.9,
        IIf([Quantity]>=50,[Total Before Discount]*0.925,
            IIf([Quantity]>=20,[Total Before Discount]*0.95,[Total Before Discount]))))

转动逻辑。您没有显示折扣,而是显示折扣后的总金额,因此您应该显示总金额而不是“不适用”。

如果您显示折扣,则显示“不适用”:

IIf([Quantity]>=200,"12.5%",
    IIf([Quantity]>=100,"10%",
        IIf([Quantity]>=50,"7.5%",
            IIf([Quantity]>=20,"5%","Not Applicable")))) As DiscountPercent

答案 1 :(得分:0)

我认为您不能在计算字段中混合数字/文本答案。在这种情况下,您最好使用查询而不是计算字段。到目前为止,我已经避免使用计算字段来限制它们(比如这个)。