2017-05-30 93 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那樣強大,所以它只會很混亂)。

相關問題