这个表达怎么了?

时间:2015-06-17 12:54:53

标签: sql ms-access

Comments: Switch(((IIf(([qty_req]-[qty_on_hand])<0,0,([qty_req]-[qty_on_hand])))=0) And ((([qty_on_hand]-[qty_req])/[qty_req])<=0.2),"Please check manually")

我一直在努力解决这个问题。我不断收到错误“这个表达式输入错误,或者它太复杂而无法评估。例如,数字表达式可能包含太多复杂的元素。请尝试通过将表达式的一部分分配给变量来简化表达式。”我试过打破表达式,看看是否有一个支架我错了地方,但我无法弄明白。

注意:“注释”一词只是字段名称(我主要使用MS Access中的设计视图)。

更新 - 这背后的目标是最终为此switch语句添加更多条件,但是第一个没有工作,所以这就是为什么看起来使用一个没有意义Switch。此外,在伪代码中,这就是这个表达式的意图:

Switch([TransferQTY]=0 And [Req is within 20% of Inventory], "Please check manually")

关于第一次IIF声明:

IIf([Req-Inventory is negative, that means that we have enough on hand and don't need to send],0, [Req-Inventory])

2 个答案:

答案 0 :(得分:0)

第一个IIF只是奇怪的构建并且有一些冗余。第二个可能会给你奇怪的答案,因为你的分子周围没有副词。正如它的编写,它可以简化为:

至于第一个IIF,您说明了

  

&#34; IIf([Req-Inventory是否定的,这意味着我们已经足够了   手,不需要发送,0,[需求库存])&#34;

在switch(psuedo-coded)的上下文中:

  

开关([TransferQTY] = 0并且[Req在库存的20%范围内],&#34;请   手动检查&#34;)

这基本上是说&#34;如果quantity requested减去quantity on hand小于或等于0&#34;,那么代替IIF来做&#34;小于或等于&#34;位,只需使用<=

Switch(((qty_req - qty_on_hand) <= 0) AND (((qty_on_hand - qty_req)/qty_req) <= 0.2), "Please Check Manually")

这样做会更好,因为Access正在考虑复杂性。这大大降低了复杂性并完成了同样的事情。

此外,我对这里的parantheses有点沉重。您可以删除描述AND函数正在评估的每个条件的那些,并且没有问题。

我已经删除了这里没有使用此答案的先前版本中的开关的位,因为OP声明在此位开始工作后将使用switch()

答案 1 :(得分:0)

我认为这只是一张支票:

IIf([qty_req]-[qty_on_hand]<0 And ([qty_on_hand]-[qty_req])/[qty_req]<=0.2,"Please check manually","") AS Comments