访问查询If /或condition

时间:2012-05-04 10:50:34

标签: ms-access

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

2 个答案:

答案 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。