假设我的表结构像
ID OEReference
--- ------------
1 00000634B9
2 00000634B6
3 0005000053
4 0002855071
5 0000940148
6 0001414825
7 00000634B9我想要他们的方式,我提供的OEReference,订单应该保持在输出。我的sql就像
Select * from mytable where OEReference in ('00000634B9','0001414825','00000634B6')上述语句没有按照IN子句的顺序返回结果集。我知道用命令从句是不可能的
如何使用sql server中的简单sql语句执行此操作。谢谢
发布于 2012-03-27 10:28:13
您可以使用临时表作为筛选器。inner join将强制执行筛选器,您可以对identity列进行排序:
declare @filter table (id int identity, ref varchar(50))
insert @filter values ('00000634B9')
insert @filter values ('0001414825')
insert @filter values ('00000634B6')
select *
from YourTable yt
join @filter filter
on filter.ref = yt.OEReference
order by
filter.id发布于 2012-03-27 10:42:23
以下是我给你的解决方案:
SELECT [id], [OEReference]
FROM [Tbl]
where [OEReference] in ('002', '001')
order by case [OEReference]
when '002' then 1
when '001' then 2
end请注意:这会降低服务器的性能。这取决于表中有多少行。但是,您可以轻松地为OEReference添加索引。当然,您应该生成这样的查询动态。我的解决方案并不理想。也许你觉得它对你有用。
编码愉快!
https://stackoverflow.com/questions/9887686
复制相似问题