SQL Order By CharIndex ()

Я запускаю довольно длинный 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)

Результат этого ORDER BY просто заказывает doc_ids в стандартном порядке ASC.

Любые указания относительно того, как я могу конкретно определить результат, упорядочить этот запрос?

0
nl ja de
На ум приходит несколько способов, может быть, кто-то может даже захотеть составить пример, но это боль. В любом случае вы можете использовать временную таблицу для создания порядка значений, которые находятся в вашем разделе IN, и проанализировать их в таблице temp, используя social.msdn.microsoft.com/forums/en-US/transactsql/thread/… . Другой метод - использовать курсор и возвращать строки за строкой. Временная таблица, вероятно, быстрее.
добавлено автор RandomUs1r, источник

1 ответы

Ваш 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')

И вы можете рассмотреть вопрос о включении идентификаторов doc в список. Затем они могут использоваться по всему запросу:

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
4
добавлено
Это привело меня туда, куда мне нужно было идти. Большое спасибо за помощь.
добавлено автор Yuschick, источник
Ах да, CTE> temp table в новых версиях SQL.
добавлено автор RandomUs1r, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)