按“条款”排序

时间:2014-10-06 13:53:06

标签: sql tsql sybase ase

我有一个查询,其中我使用“In”子句。 现在我希望结果集的顺序与我的In子句相同。 例如 -

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

结果集:

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

我不想使用任何临时表。 是否有可能在一个查询中实现目标?

2 个答案:

答案 0 :(得分: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 ;

答案 1 :(得分: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,')