Ms access 计算字段(IIF)

Ms access 计算字段(IIF),ms-access,calculated-field,iif,Ms Access,Calculated Field,Iif,好吧,我正在为我的大学课程设计一个数据库。我正在查询中的计算字段上苦苦挣扎。计算字段通过表达式生成器由IIF表达式组成。主要问题是,计算出的现场工作,然而,由于我在IIF的虚假部分中加入了“不适用”,它仍然是错误的?下面是我的IIF IIf([Quantity]=20,[Total After Discount]*0.95, IIf([Quantity]=50,[Total After Discount]*0.925, IIf([Quantity]=100,[Total

好吧,我正在为我的大学课程设计一个数据库。我正在查询中的计算字段上苦苦挣扎。计算字段通过表达式生成器由IIF表达式组成。主要问题是,计算出的现场工作,然而,由于我在IIF的虚假部分中加入了“不适用”,它仍然是错误的?下面是我的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."))))

有什么帮助/想法或建议吗

此查询计算折扣后的总额。因此,其输入应为折扣前的总额。您可能正在做这样的事情:

SELECT IIf([Quantity]=20,[Total After Discount]*0.95,...) AS [Total After Discount]
FROM ...
所以在这个表达式中,
[折扣后总计]
指的是它本身,这是不可能的。换成

SELECT IIf([Quantity]=20,[Total Before Discount]*0.95,...) AS [Total After Discount]
FROM ...
如果
[折扣后总计]
是另一个查询或表中的一列,并且您希望在结果中再次使用相同的列名,则可以通过按表或查询名限定列名来实现:

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]))))
改变逻辑。您显示的不是折扣,而是折扣后的总额,因此您应该显示总额,而不是“不适用”

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


我不认为你可以在计算字段中混合数字/文本答案。在这种情况下,最好使用查询,而不是计算字段。到目前为止,我一直避免使用计算字段来克服它们的局限性(如此)。

您好,是的,我使用的是查询,但是,我需要计算出与订单大小相关的折扣。。。e、 如果订单是20,那么我需要5%的折扣等等。。。那么最好的方法是什么呢?啊!好吧,我刚才用了你的最后一个表达,只是表示折扣,它是有效的!然而,我怎样才能使它成倍增长呢?因为你不能真的用“不适用”来多个字段?顺便说一句,这家公司打算以折扣价从出版商那里购买书籍,所以我有折扣后的总额。然而,我被要求在顶部增加一个与订单大小相关的折扣。希望这有助于您理解我的数据库好吧,我使用了您的逻辑,添加了两个字段,一个显示折扣,另一个显示所有折扣后的总额!你,我的朋友,是一个传奇!如果你必须做乘法,把它放在IIF中:比如
IIF([Quantity]>=200,Quantity*Price*0.875,…)
而不是在IIF之前或之后:
Quantity*IIF([Quantity]>=200,Price*0.875,…)
,这样你就永远不会和文本相乘。
IIf([Quantity]>=200,"12.5%",
    IIf([Quantity]>=100,"10%",
        IIf([Quantity]>=50,"7.5%",
            IIf([Quantity]>=20,"5%","Not Applicable")))) As DiscountPercent