Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Запрос в SQL (сортировка)

#sql #sql_server


Есть Таблица CITIES, в которой две колонки  ID и City. City - список городов РФ. 
Надо написать SQL запрос, который вернет из таблицы CITIES список всех городов РФ,
отсортированных в следующем порядке

Первое место - Москва
Второе место - Санкт-Петербург
Все последующие места - остальные города РФ, отсортированные в алфавитном порядке
от А до Я

Я Попробовал вот так, но не получается.

Select City From Cities where City = 'Moscow' 
UNION 
Select City From Cities where City = 'Sankt-Peterburg'
UNION
Select City From Cities where City !='Moscow' And City != 'Sankt-Peterburg' Order by City

    


Ответы

Ответ 1



MySQL: select Id, City from Cities order by -field(City, 'Санкт-Петербург','Москва'), City Функция field() возвращает порядковый номер строки в списке аргументов, если строка не найдена - возвращает 0. В данном случае мы берем ее отрицательной. В итоге Москва даст -2, Спб -1, любые другие города 0. -2 будет первым в порядке сортировки. Произвольные SQL: select Id, City from Cities order by case City when 'Москва' then 1 when 'Санкт-Петербург' then 2 else 3 end, City UPD: Для MSSQL короткая нотация через функцию поиска позиции строки: select Id, City from Cities order by -patindex('%$'+City+'$%','$Санкт-Петербург$Москва$'), City И универсальный вариант, что бы потом, не меняя запроса, можно было выносить города в начало: В ту-же таблицу или в отдельную добавляем колонку с порядком сортировки. Если отдельной таблицей, то так: create table CitySort(City varchar(100) not null primary key, srt int); -- Хотя конечно по ID было бы более правильно, чем по названию ... insert into CitySort values('Москва',1), ('Санкт-Петербург',2); select Id, City from Cities a left join CitySort s on s.City=a.City order by coalesce(s.srt,99999), City

Комментариев нет:

Отправить комментарий