我正在尝试在Access中的查询设计中编写OR语句,但它无法正常工作! 声明如下:
Duration:If([Status2]="Q","2.5 Hours",IIf([Status2]=WS,"4 Hours", IIf([Status2]=MG,"3 Hours 15 Mins",IIf([Status2]=ID,"3.5 Hours"))))
答案 0 :(得分:1)
正如Zaider89指出的那样,你从第一个I
开始IIf()
。
您还要将[Status2]
与4个不同的值进行比较:Q; WS; MG; ID。您使用引号括起了第一个值,但不包括其他值。这让我怀疑数据库引擎会将未加引号的值视为参数,并要求您提供WS,MG和ID的值。
最后一个IIf()
表达式包含“真实部分”,但没有“错误部分”:
IIf([Status2]=ID,"3.5 Hours")
您可以解决这些问题,但我建议您考虑使用Switch Function。在IIf()
尝试旁边的列中的查询设计网格中的单行上尝试以下操作。
Duration:Switch([Status2]="Q","2.5 Hours",
[Status2]="WS","4 Hours",
[Status2]="MG","3 Hours 15 Mins",
[Status2]="ID","3.5 Hours")
Switch()
方法看起来对我来说更好。但是我认为最好还是创建一个单独的查找表,其中一列用于[Status2]
,另一列用于映射值。然后将该表连接到您的查询中。创建表后,在查询中使用它很容易,我认为比使用Switch()
或嵌套IIf()
表达式的方法更容易理解。当您需要添加新条件时,也可以更容易扩展 - 只需将它们添加为查找表中的行。
答案 1 :(得分:0)
如果这是您的访问数据库中的直接副本,那么您在开头的If上缺少I。它应该是IIF而不是IF。