2017-04-06 87 views
0

我通過了zoneid我的SQLSQL命令順序重複

ZoneID  | Description | 
1   | something |  
1   | something | 
1   | something |    
2   | something | 
2   | something |   
2   | something |  
3   | something | 
3   | something | 
3   | something | 

有訂單,但我想訂像這樣,有可能

ZoneID  | Description | 
1   | something |  
2   | something | 
3   | something | 
1   | something | 
2   | something |   
3   | something | 
1   | something | 
2   | something |   
3   | something | 

回答

1

在SQL Server中,你可以使用row_number()

select ZoneId, Description 
from t 
order by row_number() over (partition by ZoneId order by (select 1)), ZoneId 

rextester演示:http://rextester.com/ATQBA77275

回報:

+--------+-------------+ 
| ZoneId | Description | 
+--------+-------------+ 
|  1 | something | 
|  2 | something | 
|  3 | something | 
|  1 | something | 
|  2 | something | 
|  3 | something | 
|  1 | something | 
|  2 | something | 
|  3 | something | 
+--------+-------------+ 

在視圖中使用它(如果你不能order by沒有top),只需添加一列與row_number()

create view dbo.with_rownumber as 
select 
    ZoneId 
    , Description 
    , rn = row_number() over (partition by ZoneId order by (select 1)) 
from t; 

go 
select ZoneId, Description 
from dbo.with_rownumber 
order by rn, ZoneId 
+0

非常感謝你,我可以在SQL視圖上使用row_number嗎?,我認爲SQL視圖不能執行row_number – tonydeleon

+0

@tonydeleon更新了我的答案,包括如何在視圖外使用'row_number()'和視圖外'order by'。 – SqlZim

+0

非常感謝@SqlZim – tonydeleon