假设我的表结构类似于
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 子句的顺序返回结果集。我知道 ORDER BY CLAUSE
是不可能的我怎样才能在sql server中使用简单的sql语句。感谢
答案 0 :(得分:5)
您可以使用临时表作为过滤器。 inner join
将强制执行过滤器,您可以对标识列进行排序:
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
答案 1 :(得分:0)
请在这里找到我的解决方案:
SELECT [id], [OEReference]
FROM [Tbl]
where [OEReference] in ('002', '001')
order by case [OEReference]
when '002' then 1
when '001' then 2
end
请注意:这会降低服务器的性能。这取决于您拥有的表中的行数。但是,您可以轻松地为OEReference添加索引。当然,您应该生成动态这样的查询。 我的解决方案并不理想。也许你觉得它对你有用。
快乐的编码!