У меня есть приложение PHP, которое отображает список параметров для пользователя. Список создается на основе простого запроса к SQL 2000. Я бы хотел, чтобы в верхней части списка была определенная опция, а оставшиеся опции были отсортированы в алфавитном порядке.
Например, вот варианты, отсортированные по алфавиту:
Calgary
Edmonton
Halifax
Montreal
Toronto
Я бы хотел, чтобы список был примерно таким:
**Montreal**
Calgary
Edmonton
Halifax
Toronto
Есть ли способ сделать это с помощью одного запроса? Или я застрял в запуске запроса дважды и добавляю результаты?


SELECT name FROM options ORDER BY name = "Montreal", name;
Примечание. Это работает с MySQL, а не с SQL 2000, как запрашивается OP.
Ах да, я, должно быть, думал о синтаксисе MySQL: D
create table Places (
add Name varchar(30),
add Priority bit
)
select Name
from Places
order by Priority desc,
Name
SELECT name
FROM locations
ORDER BY
CASE
WHEN name = 'Montreal'
THEN 0
ELSE 1
END, name
У меня была аналогичная проблема на веб-сайте, который я создал, полный отчетов о случаях. Я хотел, чтобы отчеты о случаях, в которых известно имя жертвы, располагались в самом верху, потому что они более убедительны. И наоборот, я хотел, чтобы все дела Джона Доу были внизу. Поскольку это также связано с именами людей, у меня также была проблема с сортировкой имени / фамилии. Я не хотел разбивать его на два поля имен, потому что в некоторых случаях вообще не люди.
Мое решение:
У меня есть поле «Имя», которое и отображается. У меня также есть поле «NameSorted», которое используется во всех запросах, но никогда не отображается. Мой пользовательский интерфейс ввода обеспечивает автоматическое преобразование «ПОСЛЕДНЕГО, ПЕРВОГО», введенного в поле сортировки, в отображаемую версию.
Наконец, чтобы «подстроить» сортировку, я просто помещаю соответствующие символы в начало поля сортировки. Так как я хочу, чтобы материал выходил в конце, я ставил "zzz" в начале. Для сортировки вверху можно поставить "!" в начале. Опять же, ваш интерфейс редактирования может позаботиться об этом за вас.
Да, я признаю, что это немного дрянно, но это работает. Одним из преимуществ для меня является то, что мне приходится выполнять более сложные запросы с объединениями в разных местах для создания страниц по сравнению с RSS и т. д., И мне не нужно постоянно запоминать сложное выражение, чтобы получить правильную сортировку, его всегда просто сортируют по "NameSorted " поле.
Щелкните мой профиль, чтобы увидеть получившийся веб-сайт.
Я закончил с этим
SELECT name
FROM locations
LEFT JOIN (VALUES ('Toronto', 1), ('Montreal', 2)) city (name, rank)
ON locations.name = city.name
ORDER BY city.rank, locations.name;
Это может быть излишним для этого примера, но может быть расширено для более сложных нужд.
Я попытался использовать ваше решение, но оно вызвало синтаксическую ошибку SQL в значке = в заказе. Спасибо за идею.