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