#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
Комментариев нет:
Отправить комментарий