2014-10-06 7 views
-1

У меня есть запрос, в котором я использую в нем предложение «В». Теперь я хочу, чтобы результирующий набор был в том же порядке, что и мой пункт In. Например -Упорядочить по «В разделе»

select Id,Name from mytable where id in (3,6,7,1) 

Результат Набор:

|Id | Name | 
------------ 
| 3 | ABS | 
| 6 | NVK | 
| 7 | USD | 
| 1 | KSK | 

Я не хочу использовать любую временную таблицу. Можно ли достичь цели в одном запросе?

+0

Put 3 , 6,7,1 в таблице, INNER JOIN к нему, ORDER BY –

+0

Это интервью? Зачем вам это делать? И зачем использовать только один запрос? Если это подлинное требование, у вас могут быть тысячи строк, а не просто 4. – Meet

+0

@Meet Это не вопрос интервью, но да, коллега по работе обманул меня этим, и он делает интервью для нашей команды :-) –

ответ

2

В T-SQL, вы можете сделать это с помощью большой case:

select Id, Name 
from mytable 
where id in (3, 6, 7, 1) 
order by (case id when 3 then 1 when 6 then 2 when 7 then 3 else 4 end); 

Или с charindex():

order by charindex(',' + cast(id as varchar(255)) + ',', 
        ',3,6,7,1,') 
+0

Я думаю он хочет этого только в сибасе, а не в MSSQL. Таким образом, никакой charindex не будет работать –

+1

@AnkitBajpai. , , Sybase поддерживает 'charindex()'. –

+0

Да, Sybase ASE 15 поддерживает charindex() - я пытался с помощью charindex в начале, но, возможно, неправильно думал. Но я получил свой результат с логикой Гордона. Благодаря ! –

3

Вы можете использовать CTE, а

with filterID as 
(
    3 ID, 1 as sequence 
    union 
    6, 2 
    union 
    7, 3 
    union 
    1, 4 
) 

select mytable.* from mytable 
inner join filterID on filterID.ID = mytable.ID 
order by filterID.sequence ;