使用OR访问查询SQL IIf语句



我有以下SQL语句:

SELECT * FROM BOM INNER JOIN Parts ON BOM.PartID = Parts.PartID
WHERE (((BOM.PUMP_CODE) Like (IIf([Forms]![frmSelector]![tbMotor]>0 And
     [Forms]![frmSelector]![tbShaft]>0,"MOTOR" Or "SHAFT",IIf([Forms]![frmSelector]![tbMotor]>0,"MOTOR","SHAFT")))))
ORDER BY BOM.BOM_INDEX;

在第一个IIF语句中,我无法获得返回任何记录的查询。当两个引用对象都>0时,我希望它在PUMP_CODE字段中返回所有带有"MOTOR"或"SHAFT"的记录。即使两个对象都大于0,它仍然不会返回任何记录。然而,IIF的后一个声明运行良好。这个查询有问题吗?

您的"MOTOR" Or "SHAFT"错误。首先计算两个字符串的oror的结果就是iif()使用的结果。

这意味着你正在有效地进行

IIF(..., true, ...)

或者访问CCD_ 5的两个字符串的任何内容。

在几乎任何一种编程语言中,你都无法进行

if (x == "a" or "b")

因为它将作为执行

if (x == ("a" or "b")) -> if (x == (result))

你需要做

if (x == "a") OR (x == "b")

如果两个设置都大于0,请尝试使用IN子句而不是LIKE,并更改IIF以将两者放在一起,否则请使用工作子句。

我还添加了转义双引号来括起这对,并添加到单个项目中,以防您使用其中有空格的项目

SELECT * FROM BOM INNER JOIN Parts ON BOM.PartID = Parts.PartID
WHERE BOM.PUMP_CODE IN (
IIf([Forms]![frmSelector]![tbMotor]>0 And [Forms]![frmSelector]![tbShaft]>0, """MOTOR"",""SHAFT""",
     IIf([Forms]![frmSelector]![tbMotor]>0,""MOTOR"",""SHAFT"")))     
ORDER BY BOM.BOM_INDEX;

最新更新