Access查询提取非零价格字段的IIf函数语法错误求助
Access查询提取非零价格字段的IIf函数语法错误求助
你好呀!看了你在Access里想用IIf函数从NEGITS和ITSMULT两个字段中提取非零价格到Base字段的需求,以及你尝试的几个错误写法,我来帮你梳理清楚问题所在,再给出正确的表达式~
首先,你之前的写法都没掌握Access中IIf函数的正确结构:IIf(条件表达式, 满足条件时返回的值, 不满足条件时返回的值),你之前把条件判断和返回值的逻辑混在了一起,导致语法报错。
根据你的需求——优先取非零的价格字段,我给你几种适配不同场景的正确写法:
场景1:优先取NEGITS,如果它非零就用它,否则直接用ITSMULT(不管ITSMULT是否为零)
Base: IIf([NEGITS] > 0, [NEGITS], [ITSMULT])
场景2:仅取两个字段中非零的那个,如果两个都为零则返回Null(空值)
需要嵌套一层IIf来做二次判断:
Base: IIf([NEGITS] > 0, [NEGITS], IIf([ITSMULT] > 0, [ITSMULT], Null))
场景3:用Nz函数简化嵌套逻辑(和场景2效果一致)
Nz函数可以把空值或零值替换成指定内容,这里用来处理两个字段都为零的情况:
Base: Nz(IIf([NEGITS] > 0, [NEGITS], Null), [ITSMULT])
再帮你复盘下之前的错误:
- 你写的
IIf([NEGITS]>0=[NEGITS][ITSMULT]>0=[ITSMULT]):既没有正确分隔条件和返回值,也把条件判断([NEGITS]>0)和返回值([NEGITS])错误地用=连接,逻辑完全混乱,Access自然识别不了。 - 第二个尝试
IIf([NEGITS]>0=[NEGITS],[ITSMULT]>0=[ITSMULT]):虽然用逗号分隔了参数,但第一个参数是错误的条件表达式(相当于判断[NEGITS]>0的布尔结果是否等于[NEGITS]的数值,逻辑不通),而且缺少IIf必须的第三个参数,所以会报逗号相关的语法错误。
你可以根据自己的实际需求选择上面的表达式,直接放到查询的字段行里就可以啦~
备注:内容来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

