2017-05-30 13 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表現を使用することができるはずです:その後を通過するときにVBAで文字列を定義して実行し、最初のOracle SQL DeveloperでSQLを実行してみてください

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

これを前に試してみましたが、もう一度試してみました。エラーメッセージが表示されます:1つ以上のフィールドに適用されたフィルタのエラーが有効ではありません。 – Anthrochange

+1

@Anthrochange。 。 。 「ORDER BY」条件は、通常、「フィルタ」と呼ばれない。おそらく問題はクエリの他の場所にあります。 –

+0

@Anthrochange - ヘルプを得るためにエラーメッセージを報告するときは、書かれているとおりに正確に報告する必要があります。リレーショナル・データベースには「フィールド」はありません(Oracleデータベースにはありません)。エラーメッセージに正確な言語が含まれていれば、Oracleエラーではない可能性があります。 – mathguy

0

をクエリ(ADODB接続)。

ジェットエンジンでCASE WHENを使用しようとすると失敗します。ネイティブアクセスでは、「即時」のIIF()関数のみが許可されます。これはORDER BY句に投げることができます(CASE WHENほど強力ではないので、面倒です)。