Многократный порядок T-SQL по предложениям - PullRequest
2 голосов
/ 31 января 2012

Можно ли иметь несколько заказов по предложениям в операторе выбора? Могу ли я сделать что-то подобное?

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]

Причина, по которой мне нужен второй заказ, заключается в том, чтобы гарантировать, что записи возвращаются с увеличением времени прибытия.

ТИА.

Ответы [ 3 ]

4 голосов
/ 31 января 2012

Не повторяйте 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]
3 голосов
/ 31 января 2012

Использовать список через запятую:

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 голос
/ 31 января 2012

Заказ по существу стеками.

Таким образом, если у вас есть предложение типа order by duration, arrival, SQL сначала попытается упорядочить по длительности, а затем по прибытию для каждого значения продолжительности.

...