此查询计算总折扣后。因此,它的输入应该是折扣前的总和。你可能正在做这样的事情:
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