2012-03-27 46 views
2

想我的表結構是這樣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語句來做到這一點。謝謝

+0

您可以使用[此答案](http://stackoverflow.com/a/8739026)中的方法。 – 2012-03-27 11:25:54

+0

@and:他沒有按「OEReference」的升序排序 – Andomar 2012-03-27 11:30:47

+0

@Andomar:不,他不是。我的答案也不表示這樣做。我們的想法是將值列表作爲單個CSV字符串傳遞,將其拆分爲一個拆分函數,並對函數返回的索引列上的最終結果集進行排序。 – 2012-03-27 11:46:52

回答

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 
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添加索引。當然,你應該動態產生這樣的查詢。 我的解決方案並不理想。也許你覺得它對你有用。

快樂編碼!

+1

這會起作用,但它重複'in'子句,這種錯誤容易 – Andomar 2012-03-27 10:54:59

相關問題