Подтвердить что ты не робот

SQL - порядок по списку

У меня есть следующий запрос, который возвращает строки на основе разделенного запятой списка

Select * from Table where RecordID in (22,15,105,1,65,32)

Я хочу, чтобы результаты этого запроса возвращались в порядке идентификатора в списке. Возможно ли это с SQL?

Заранее спасибо

4b9b3361

Ответ 1

Если вам нужно, чтобы вывод отображался в определенном порядке, вам нужно указать этот порядок, используя что-то, что может сортировать сервер. Не зная, с какого движка вы работаете, общей схемой было бы создать временную таблицу или использовать конструкторы набора строк для сопряжения каждого идентификатора записи с желаемым порядком сортировки.

например. (SQL Server)

declare @T table (RecordID int,Position int)
insert into @T (RecordID,Position)
select 22,1 union all
select 15,2 union all
select 105,3 union all
select 1,4 union all
select 65,5 union all
select 32,6

select * from Table t inner join @T t2 on t.RecordID = t2.RecordID order by t2.Position

Ответ 2

select * from Table
where RecordID in (22,15,105,1,65,32)
order by (
    case RecordID 
        when 22 then 1
        when 15 then 2
        when 105 then 3
        when 1 then 4
        when 65 then 5
        when 32 then 6 end)

Ответ 3

Я бы заказал в клиенте, но если вы действительно хотите сделать это в SQL, сделайте это так:

declare @T table (id int identity(1,1), RecordID int)

insert into @T (RecordID)
values (22), (15), (105), (1), (65), (32)

select * from 
[table] t 
inner join @t s on t.id=s.recordid
where t.id in (22, 15, 105, 1, 65, 32)
order by s.id

(работает в SQL Server 2008)

Ответ 4

Да. Вы добавляете предложение ORDER BY recordedid в конце.

Ответ 5

В прошлый раз, когда я должен был это сделать, я закончил создание всего объединения и создал оператор select для каждого id, т.е.

select * from Table where RecordID = 22
union all
select * from table where recordid = 15

и др.

Это была боль, но это сработало.

Ответ 6

Используйте ORDER BY для RecordID

Select * from Table where RecordID in (22,15,105,1,65,32) ORDER BY RecordID