Sql “订购”;在第条中;

Sql “订购”;在第条中;,sql,tsql,sybase,ase,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 | 我不想使用任何临时表。 是否可以在一个查询中实现目标?在T-SQL中,可以使用一个大的案例来实现这一点: select Id, Na

我有一个查询,其中我使用了“In”子句。 现在,我希望按照与in子句相同的顺序设置结果。 例如—

select Id,Name from mytable where id in (3,6,7,1)
结果集:

|Id | Name |
------------
| 3 |  ABS |
| 6 |  NVK |
| 7 |  USD |
| 1 |  KSK |
我不想使用任何临时表。
是否可以在一个查询中实现目标?

在T-SQL中,可以使用一个大的
案例来实现这一点:

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()


您也可以使用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 ;

把3,6,7,1放在一个表中,内部连接到表中,按顺序排列面试问题是什么?你为什么要这么做?为什么只使用一个查询?如果这是一个真正的要求,那么您可能有数千行而不是4行。@Meet这不是面试问题,但是的,一位同事用这个欺骗了我,他确实为我们的团队接受了面试:-)我想他只想在sybase中使用,而不是在MSSQL中使用。所以没有查林德斯会work@AnkitBajpai . . . Sybase支持charindex()
。是的,Sybase ASE 15确实支持charindex()-我刚开始尝试使用charindex,但可能没有正确思考。但我用戈登的逻辑得出了结果。谢谢
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 ;