用于显示记录的SQL查询,如果记录中缺少某些字母

时间:2017-07-11 07:37:18

标签: ms-access

例如:考虑ABCDEF是字母。

ID状态备注 1 ABCDEF {无需显示结果,因此所有字母都存在(来自ABCDEF组合)} 2 FEBACD {无需显示结果,因此所有字母都存在(来自ABCDEF组合,但序列不同)}

3 CD {仅存在字母C和D,剩余字母(缺少ABEF,此记录需要显示在结果中)

4)ABE {仅存在字母AB和E,剩余字母(缺少CDF,此记录需要显示在结果中)。

预期结果:

ID状态

3 CD 4 ABE

请帮助我如何实现这个结果,我是SQL的基本学习者。

提前感谢您的帮助。

我使用的条款是:

WHERE ((InStr([CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS),"D",0) 
Or (InStr([CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS),"E",0) 
Or (InStr([CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS),"L",0)); 

错误消息:

I am getting error as "syntax error (comma) in query expression " in WHERE statement. Could some one clarify whats the error?

2 个答案:

答案 0 :(得分:1)

请继续阅读InStr文档,LIKE声明可能会对您有所帮助。

如果您想使用InStr,以下内容应该修复它:

  WHERE
  InStr(1, [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS,"D") = 0
  Or InStr(1, [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS,"E") = 0
  Or InStr(1, [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS,"L") = 0;

(InStr的第一个参数是搜索位置(可以省略),其中1是第一个字符)。

此外,InStr返回字符的位置或0(如果未找到),因此在测试是否找到某些内容时,您需要将其与0或0进行比较。

或者,您可以使用NOT LIKE,以获得更简单的语法。

WHERE
  [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS NOT LIKE "*D*"
  Or [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS NOT LIKE "*E*"
  Or [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS NOT LIKE "*F*";

答案 1 :(得分:0)

你的表达式中有太多括号,缺少InStr的第一个参数,并且没有执行比较(即。InStr() > 0),请尝试:

WHERE
  InStr(1, [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS,"D") > 0 
  Or InStr(1, [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS,"E") > 0  
  Or InStr(1, [CMD_PLANT_MATERIAL Query].MAINTENANCE_STATUS,"L") > 0; 

作为更多" SQL"命令您可能想要显示使用NOT LIKE的答案。