2014-09-18 2 views
1

В нижеследующем запросе, что я должен сделать, чтобы получить результаты в том же порядке, что и входной параметр.Возврат результатов в «ЖЕ САМЫЙ ЗАКАЗ» в качестве входного параметра

DECLARE @sql varchar(max) 
SET @sql = 'SELECT a.num AS Num, a.photo as Photo , row_number() over (order by (select 0)) rn 
      FROM tbl a (nolock) WHERE a.num IN (' + @NumList + ') ' 

переходит в к @NumList парам следующего (в качестве примера):

1-235,1-892,2-847,1-479,3-890,1-239,2-892 

Это прекрасно работает, однако мне нужны результаты возвращение в «тот же порядке» в качестве входных пар ,

Я создал SQL Fiddle

ответ

2

Если @NumList содержит уникальные значения, которые вы могли бы использовать CharIndex найти свою позицию в парах Ex:

order by charindex(a.num, @NumList) 
2
  1. Создать локальную временную таблицу #numbers. Убедитесь, что он имеет столбец идентификации с автоматическим увеличением.

  2. Вставьте цифры от @NumList в #numbers в правильном порядке.

    • Разделить @NumList на запятую и превратить отдельные значения в строки. См. this question для идей, как это сделать.
    • В качестве альтернативы, поверните @NumList из переменной VARCHAR в переменную таблицы. (Таким образом, вы могли бы даже быть в состоянии использовать его непосредственно, то есть вместо #numbers.)
       
  3. Измените запрос таким образом, что строки из tbl a соединены #numbers. Кроме того, добавьте предложение ORDER BY, которое сортирует результат по столбцу с идентификатором автоинкремента #numbers.

Смежные вопросы