需要有关此IIF声明的帮助

时间:2013-03-06 16:41:16

标签: ms-access if-statement syntax

我输入了这个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))))))))))))))))

3 个答案:

答案 0 :(得分:1)

考虑使用Switch()函数而不是嵌入式iif 您还可以将因子为1.22的5个案例留作“Else”案例

您似乎还可以创建一个包含不同[MarkUpI]和[Stock / NonStock1]值的表格并加入该表格以获得所需内容?

答案 1 :(得分:1)

似乎Access对嵌套IIF的数量有限制,但在您的情况下,您可以将其分为2个主要IIF(对于股票和非股票),其他嵌套在这些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))))))))))

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

答案 2 :(得分: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