2013-04-04 120 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