2017-05-30 70 views
0

我正在使用VBA和SQLdeveloper将多个关键字输入与数据库进行比较。我要么搜索使用所有的AND或所有的OR,AND的工作正常,但我想根据成功比较的次数返回OR。我目前的代码似乎以随机的方式返回结果,而不是我想要的结果,这基本上是相关的。这里是我的代码的一个例子:如何根据OR结果的数量对SQL查询进行排序

Dim sSQLOrder As String 
sSQLOrder = " ORDER BY (Title LIKE '%Title Keyword 1%' + Title LIKE '%Title 
Keyword 2%' + ...) DESC" 

从我的理解,这应该排序它,但没有。我也尝试对ASC和DESC进行排序,这会改变顺序,但不会以任何有效的方式进行。感谢您阅读本文。

+3

请用你正在使用的数据库标记你的问题。 –

+0

根据评论,代码是在MS Access中,所以我修复了标签。 –

回答

4

在任何数据库,你应该能够使用ANSI标准CASE表达:

ORDER BY (CASE WHEN Title LIKE '%Title Keyword 1%' THEN 1 ELSE 0 END + 
      CASE WHEN Title LIKE '%Title Keyword 1%' THEN 1 ELSE 0 END + 
      . . . 
     ) DESC 
+0

我以前试过,只是再试一次,我收到一条错误消息,说:错误应用于一个或多个字段的过滤器无效。 – Anthrochange

+1

@Anrochange。 。 。 'ORDER BY'条件通常不被称为“过滤器”。也许问题在查询的其他地方。 –

+0

@Anthrochange - 当您为了获得帮助而报告错误信息时,您应该在写入时报告它们。关系数据库中没有“字段”(当然不在Oracle数据库中);如果您在错误消息中使用了确切的语言,则可能不是Oracle错误。 – mathguy

0

先尝试运行在Oracle SQL Developer中的SQL,再后来在VBA定义字符串,并通过执行一个PASS查询(ADODB连接)。

如果您尝试在Jet引擎中使用CASE WHEN,它将失败。 Native Access只允许使用“立即if”IIF()函数 - 您仍然可以将其放入ORDER BY子句中(由于它不如CASE WHEN那样强大,所以它只会很混乱)。

相关问题