Microsoft SQL Server
СОРТИРОВАТЬ ПО
Поиск…
замечания
Цель предложения ORDER BY - сортировать данные, возвращаемые запросом.
Важно отметить, что порядок строк, возвращаемых запросом, не определен, если не существует предложение ORDER BY.
Подробную информацию о предложении ORDER BY см. В документации MSDN: https://msdn.microsoft.com/en-us/library/ms188385.aspx
Простое предложение ORDER BY
Используя таблицу Employees , ниже приведен пример возврата столбцов Id, FName и LName в порядке возрастания LName:
SELECT Id, FName, LName FROM Employees
ORDER BY LName
Возвращает:
Я бы | FName | LName |
---|---|---|
2 | Джон | Джонсон |
1 | Джеймс | кузнец |
4 | Джонатон | кузнец |
3 | Майкл | Williams |
Чтобы отсортировать в порядке убывания, добавьте ключевое слово DESC после параметра поля, например, один и тот же запрос в порядке убывания LName:
SELECT Id, FName, LName FROM Employees
ORDER BY LName DESC
ORDER BY несколькими полями
Несколько полей могут быть указаны для предложения ORDER BY
в порядке ASCending или DESCending.
Например, используя таблицу http://stackoverflow.com/documentation/sql/280/example-databases/1207/item-sales-table#t=201607211314066434211 , мы можем вернуть запрос, который сортируется по SaleDate в порядке возрастания, и Количество в порядке убывания.
SELECT ItemId, SaleDate, Quantity
FROM [Item Sales]
ORDER BY SaleDate ASC, Quantity DESC
Обратите внимание, что ключевое слово ASC
является необязательным, и результаты сортируются по возрастанию по заданному полю по умолчанию.
ORDER BY со сложной логикой
Если мы хотим упорядочить данные по-разному для каждой группы, мы можем добавить синтаксис CASE
в ORDER BY
. В этом примере мы хотим заказать сотрудников из Департамента 1 по фамилии и сотрудникам из отдела 2 по зарплате.
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
1 | Джеймс | кузнец | 1234567890 | НОЛЬ | 1 | 1000 | 01-01-2002 |
2 | Джон | Джонсон | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Майкл | Williams | 1357911131 | 1 | 2 | 600 | 12-05-2009 |
4 | Джонатон | кузнец | 1212121212 | 2 | 1 | 500 | 24-07-2016 |
5 | Сэм | саксонский | 1372141312 | 2 | 2 | 400 | 25-03-2015 |
The following query will provide the required results:
SELECT Id, FName, LName, Salary FROM Employees
ORDER BY Case When DepartmentId = 1 then LName else Salary end
Пользовательский заказ
Если вы хотите заказать по столбцу, используя что-то другое, кроме алфавитного / числового порядка, вы можете использовать case
чтобы указать нужный вам заказ.
order by Group
:
группа | подсчитывать |
---|---|
Не на пенсии | 6 |
В отставке | 4 |
Всего | 10 |
order by case group when 'Total' then 1 when 'Retired' then 2 else 3 end
возвращает:
группа | подсчитывать |
---|---|
Всего | 10 |
В отставке | 4 |
Не на пенсии | 6 |