如何按OR结果的数量对SQL查询进行排序

时间:2017-05-30 20:46:16

标签: sql vba ms-access

我正在使用VBA和SQLdeveloper来比较数据库的多个关键字输入。我要么使用所有ANDs或所有OR进行搜索,ANDs一直工作正常,但我希望OR根据成功比较的次数返回。我目前的代码似乎以随机的方式返回结果,而不是我想要它本质上是相关性的。这是我的代码示例:

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

根据我的理解,这应该排序,但不是。我也尝试过排序ASC vs DESC,这会改变顺序,但不会以任何有效的方式。感谢您阅读本文。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

首先尝试在Oracle SQL Developer中运行SQL,然后在VBA中定义字符串并执行PASS THROUGH查询(ADODB连接)。

如果您尝试在Jet引擎中使用CASE WHEN,则会失败。 Native Access只允许"立即使用#34; IIF()函数 - 你仍然可以抛入ORDER BY子句(因为它不像CASE WHEN那样强大,所以它会很混乱)。