按特定顺序排序结果集

时间:2013-04-04 19:46:21

标签: sql sql-server-2008

我需要先将结果集与“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

的用户

如果我在下面这样做,它可以工作,但是如果不使用union就可以这样做。

我这样做是为了一大堆记录。

使用:

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

使用SQL Server 2008

由于

2 个答案:

答案 0 :(得分:2)

在查询结束时尝试此操作:

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

union工作的事实是偶然的 - 完全没有保证。订购结果的唯一方法是在查询的最外层指定一个order by子句。

答案 1 :(得分: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