我正在尝试在 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"))))
我正在尝试在 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"))))
正如 Zaider89 指出的那样,您I
从第一个IIf()
.
您还比较[Status2]
了 4 个不同的值: Q; WS; 镁;ID。您将这些值中的第一个用引号括起来,而不是其他值。这让我怀疑 db 引擎会将未引用的值视为参数,并要求您提供 WS、MG 和 ID 的值。
您的最后一个IIf()
表达式包含“真实部分”但没有“虚假部分”:
IIf([Status2]=ID,"3.5 Hours")
您可以解决这些问题,但我建议您考虑改用开关功能。在您尝试旁边的列中的查询设计网格中的单行上尝试以下操作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()
表达式的方法更容易理解。当您需要添加新条件时,扩展也更容易——只需将它们作为行添加到查找表中即可。
如果那是您访问数据库的直接副本,那么您在开头的 If 上缺少 I。它应该是 IIF 而不是 IF。