好吧,我目前正在为我的大学课程设计一个数据库。我正在查询中的计算字段上苦苦挣扎。计算字段由通过表达式生成器的 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
我认为您不能在计算字段中混合数字/文本答案。在这种情况下,最好使用查询而不是计算字段。到目前为止,我已经避免使用计算字段来限制它们(例如这个)。