2013-04-04 125 views
0

我需要先將結果集與「NY」條目進行分組,然後再將可能返回的任何其他狀態條目分組。按特定順序排列結果集

例子:

OrderID State Type 
----------------------------   
123  CA  Checque 
123  NY  ELectronic 
222  JC  Checque 
123  NY  Checque 

OrderID是主鍵

結果集需要的樣子:

OrderID State Type  
---------------------------- 
123  NY  ELectronic 
123  NY  Checque  
123  CA  Checque 

爲用戶提供OrderID = 123

如果我下面做它的工作原理但是如果不使用uni,可以這樣做嗎?上。

我正在爲一大組記錄做到這一點。

它的工作原理使用:

Select * from Table1 where orderid = 123 and State = 'NY' 
Union 
Select * from Table1 where orderid = 123 and State <> 'NY' 

使用SQL Server 2008

感謝

+1

據透露,聯盟的做法有沒有工作機會,因爲那裏最後是沒有訂單的。 Union不僅僅是對結果集進行連接,它本身也沒有訂單保證。 – usr 2013-04-04 20:15:02

回答

2

在查詢結束試試這個:

order by (case when state = 'NY' then 0 else 1 end), 
     state 

的事實union作品是偶然的 - 一點都沒有保證。訂購結果的唯一方法是在查詢的最外層指定order by子句。

0

您可以使用case語句獲取'NY'到頂部,然後通過StateType desc象下面這樣:

FIDDLE DEMO

select OrderID, State, Type 
from T 
where orderID = 123 
order by case when State = 'NY' then '0' else State end, Type desc