0

私はかなり長いSQLクエリを実行していますが、そのコアはかなり基本的なものです。

SELECT * FROM documents WHERE doc_id IN (995,941,940,954,953,973)

このクエリの目標の結果は、IN句で設定された順序でドキュメントを表示することです。しかし、私はそうするためのきれいな解決策をまだ見つけていません。

これを処理するためにcharindex()を使用できると思いました。

ORDER BY charindex('995,941,940,954,953,973',doc_id)

そのORDERBYの結果は、デフォルトのASC順序でdoc_idsを順序付けるだけです。

このクエリの結果の順序を具体的に定義する方法についてのガイダンスはありますか?

4

1 に答える 1

4

あなたのcharindexは逆です:

order by charindex(doc_id, '995,941,940,954,953,973')

が数値として保存されている場合doc_idは、キャストを行う必要があります。

order by chardindex(cast(doc_id as varchar(255)),  '995,941,940,954,953,973')

また、ドキュメントIDをリストに入れることを検討してください。次に、クエリ全体で使用できます。

with doclist as (
      select 1 as ordering, '995' as docid union all
      select 2 , '941' union all
      . . .
)
select . . .
from . . .
     left outer join
     doclist dl
     on docid = dl.docid
order by dl.ordering
于 2013-02-25T17:03:01.630 に答える