1

我正在尝试在 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"))))

4

2 回答 2

1

正如 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()表达式的方法更容易理解。当您需要添加新条件时,扩展也更容易——只需将它们作为行添加到查找表中即可。

于 2012-05-04T13:07:05.133 回答
0

如果那是您访问数据库的直接副本,那么您在开头的 If 上缺少 I。它应该是 IIF 而不是 IF。

于 2012-05-04T12:12:34.143 回答