2

我输入了这个 iif 语句,它说你输入的表达式很复杂,有人可以给我建议如何处理这个问题。你认为我应该拆分公式吗?

IIf([MarkUpI]=100 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=101 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=200 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=201 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=300 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1, 
IIf([MarkUpI]=400 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=500 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.03, 
IIf([MarkUpI]=600 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*22, 
IIf([MarkUpI]=100 And [Stock/NonStock1]="Non-Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=101 And [Stock/NonStock1]="Non-Stock",[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=200 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=201 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=300 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1, 
IIf([MarkUpI]=400 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=500 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.03, 
IIf([MarkUpI]=600 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*22,0))))))))))))))))
4

3 回答 3

1

似乎 Access 对嵌套 IIF 的数量有限制,但在您的情况下,您可以将其分为 2 个主要 IIF(用于库存和非库存),其他嵌套在其中,并删除以下常见计算:

CalcResult: [QTY1]+[UnitPrice1] *
    IIf([Stock/NonStock1]="Stock",
        IIf([MarkUpI]=100,1.22,
        IIf([MarkUpI]=101,1.22,
        IIf([MarkUpI]=200,1.22,
        IIf([MarkUpI]=201,1.22,
        IIf([MarkUpI]=300,1,
        IIf([MarkUpI]=400,1.05,
        IIf([MarkUpI]=500,1.03,
        IIf([MarkUpI]=600,22,0)))))))),
    IIf([Stock/NonStock1]="Non-Stock",
        IIf([MarkUpI]=100,1.22,
        IIf([MarkUpI]=101,1.05,
        IIf([MarkUpI]=200,1.22,
        IIf([MarkUpI]=201,1.05,
        IIf([MarkUpI]=300,1,
        IIf([MarkUpI]=400,1.05,
        IIf([MarkUpI]=500,1.03,
        IIf([MarkUpI]=600,22,0))))))))))

注意:我并不是说这是最好的方法(我也同意查找表会更好),但这可以解决您的问题。

于 2013-03-06T17:55:55.590 回答
1

如果您真的想在查询中完成所有操作,请使用 Switch 函数,如下所示:

[QTY1]+[UnitPrice1] *
IIf([Stock/NonStock1]="Stock",
Switch([MarkUpI]=100,1.22,[MarkUpI]=101,1.22,[MarkUpI]=200,1.22,[MarkUpI]=201,1.22,[MarkUpI]=300,1,[MarkUpI]=400,1.05,[MarkUpI]=500,1.03,[MarkUpI]=600,22,0),
Switch([MarkUpI]=100,1.22,[MarkUpI]=101,1.05,[MarkUpI]=200,1.22,[MarkUpI]=201,1.05,[MarkUpI]=300,1,[MarkUpI]=400,1.05,[MarkUpI]=500,1.03,[MarkUpI]=600,22,0))

但是您真的想像其他人强烈建议的那样使用查找表。稍后更改值会容易得多,看起来像这样:

Stocked MarkupI Amt
Stock   100 1.22
Stock   101 1.22
Stock   200 1.22
Stock   201 1.22
Stock   300 1
Stock   400 1.05
Stock   500 1.03
Stock   600 22
Non-Stock   100 1.22
Non-Stock   101 1.05
Non-Stock   200 1.22
Non-Stock   201 1.05
Non-Stock   300 1
Non-Stock   400 1.05
Non-Stock   500 1.03
Non-Stock   600 22
于 2013-03-06T18:41:27.873 回答
1

考虑使用Switch()function 而不是 embedded iifs。
您也可以将因子为 1.22 的 5 个案例保留为“其他”案例

看来您还可以创建一个具有不同 [MarkUpI] 和 [Stock/NonStock1] 值的表并加入该表以获得您需要的内容?

于 2013-03-06T16:48:39.460 回答