Sql server按值排序而不是按字段名称排序

时间:2012-03-27 10:24:17

标签: sql sql-server

假设我的表结构类似于

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语句。感谢

2 个答案:

答案 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添加索引。当然,您应该生成动态这样的查询。 我的解决方案并不理想。也许你觉得它对你有用。

快乐的编码!