SQL-запрос со специализированным упорядочиванием результатов

У меня есть таблица, которая имеет 3 столбца, представляющие остановки в маршруте шины.

ID
stop_name
stop_order

Я желаю возвратить список остановок, запускающихся с текущей остановки (который я знаю). Таким образом, если текущая остановка будет остановкой номер 5 затем, что возвращается, то будет следующие:

stop_order
5
6
7
8
1
2
3
4

Я попробовал:

Select * from routes where stop_order >= 3 and route = 'Red' 
Union 
Select * from routes where stop_order < 3 and route = 'Red

и это работает, если данные вводились в таблицу в порядке остановок. Если это не было затем, это возвращает данные в порядке, это вводилось.

0
задан OMG Ponies 2 August 2010 в 17:16
поделиться

4 ответа

Вы можете сделать это в одном запросе, чтобы сэкономить на доступе к таблице, используя операторы case.

select * from routes
where route = 'Red'
order by case when stop_order >= 3 then 0 else 1 end, stop_order
;

Исправлено!

6
ответ дан 4 September 2019 в 00:46
поделиться

Попробуйте упорядочить по stop_order для обоих операторов sql. По умолчанию результаты будут отсортированы по возрастанию

0
ответ дан 4 September 2019 в 00:46
поделиться

Думаю, Патрику это почти удалось:

(SELECT * FROM routes WHERE stop_order >= 5 ORDER BY stop_order)
UNION ALL
(SELECT * FROM routes WHERE stop_order < 5 ORDER BY stop_order)
0
ответ дан 4 September 2019 в 00:46
поделиться

Использование этого будет работать:

(Select * from routes where stop_order >= 3 and route = 'Red' Order By ID)
Union 
(Select * from routes where stop_order < 3 and route = 'Red' Order By ID)

Изменить : добавлены забытые круглые скобки.

0
ответ дан 4 September 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: