首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算场(IIF)

计算场(IIF)
EN

Stack Overflow用户
提问于 2014-12-09 16:49:53
回答 2查看 3.5K关注 0票数 0

好吧,我现在正在为我的大学课程设计一个数据库。我正在查询中的一个计算字段上挣扎。计算字段通过表达式生成器由IIF表达式组成。主要的问题是,计算的字段工作,然而,由于我已经把“不适用”在IIF的错误部分,它仍然是#错误?下面是我的IIF!

代码语言:javascript
复制
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."))))

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-09 17:01:06

此查询计算折扣后的总数。因此,它的投入应该是折扣前的总和。你可能在做这样的事情:

代码语言:javascript
复制
SELECT IIf([Quantity]=20,[Total After Discount]*0.95,...) AS [Total After Discount]
FROM ...

因此,在这个表达式中,[Total After Discount]指的是自身,这是不可能的。把它改成

代码语言:javascript
复制
SELECT IIf([Quantity]=20,[Total Before Discount]*0.95,...) AS [Total After Discount]
FROM ...

如果[Total After Discount]是另一个查询或表中的列,并且希望在结果中再次使用相同的列名,则可以通过通过表或查询名称对列名进行限定来做到这一点:

代码语言:javascript
复制
SELECT
    IIf([Quantity]=20, MyTable.[Total After Discount]*0.95, ...)
        AS [Total After Discount]
FROM MyTable

这消除了不允许的递归。

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

代码语言:javascript
复制
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]))))

把逻辑转过来。你不是显示的,而是折扣后的总数,所以你应该显示总数,而不是“不适用”。

如果您正在显示折扣,那么是的,请显示“不适用”:

代码语言:javascript
复制
IIf([Quantity]>=200,"12.5%",
    IIf([Quantity]>=100,"10%",
        IIf([Quantity]>=50,"7.5%",
            IIf([Quantity]>=20,"5%","Not Applicable")))) As DiscountPercent
票数 0
EN

Stack Overflow用户

发布于 2014-12-09 17:06:36

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27384340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档