T-SQL多个order by子句

时间:2012-01-30 22:51:35

标签: tsql sql-order-by

是否可以在select语句中使用多个order by子句?我可以这样做吗?

SELECT TOP(5) * FROM [Db].[dbo].[Schedules] 
where (datepart(hour, [Arrival]) >= datepart(hour, getdate()))  
order by abs( (datepart(hour, [Arrival]) - datepart(hour, getdate()))*60 + datepart(minute, [Arrival]) - datepart(minute, getdate()))
order by [Arrival]

我需要二阶的原因是确保在递增的到达时间内返回记录。

TIA。

3 个答案:

答案 0 :(得分:4)

不要重复两次ORDER BY。只需用逗号分隔您的物品即可。

SELECT TOP(5) * 
    FROM [Db].[dbo].[Schedules] 
    where (datepart(hour, [Arrival]) >= datepart(hour, getdate()))  
    order by abs( (datepart(hour, [Arrival]) - datepart(hour, getdate()))*60 + datepart(minute, [Arrival]) - datepart(minute, getdate())), 
             [Arrival]

答案 1 :(得分:3)

使用逗号分隔列表:

SELECT 
  TOP(5) * 
FROM 
  [Db].[dbo].[Schedules] 
where 
  (datepart(hour, [Arrival]) >= datepart(hour, getdate()))  
order by 
  abs( 
    (datepart(hour, [Arrival]) - datepart(hour, getdate()))*60 + datepart(minute, [Arrival]) - datepart(minute, getdate())
     ),
  [Arrival]

答案 2 :(得分:1)

基本上按堆排序。

因此,如果您有order by duration, arrival之类的子句,SQL将首先尝试按持续时间排序,然后按到达每个持续时间值。