计算字段 (IIF)



好吧,我目前正在为我的大学课程设计一个数据库。我正在查询中的计算字段上苦苦挣扎。计算字段由通过表达式生成器的 IIF 表达式组成。主要问题是,计算字段有效,但是,由于我将"不适用"放在 IIF 的虚假部分中,它仍然显示为 #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."))))

请提供任何帮助/想法或建议?

此查询计算总 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

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

相关内容

  • 没有找到相关文章

最新更新