Microsoft SQL Server
ZAMÓW PRZEZ
Szukaj…
Uwagi
Celem klauzuli ORDER BY jest sortowanie danych zwróconych przez zapytanie.
Należy zauważyć, że kolejność wierszy zwracanych przez zapytanie jest niezdefiniowana, chyba że istnieje klauzula ORDER BY.
Aby uzyskać szczegółowe informacje na temat klauzuli ORDER BY, zobacz dokumentację MSDN: https://msdn.microsoft.com/en-us/library/ms188385.aspx
Prosta klauzula ORDER BY
Korzystając z tabeli pracowników poniżej znajduje się przykład zwracania kolumn Id, FName i LName w (rosnącej) kolejności LName:
SELECT Id, FName, LName FROM Employees
ORDER BY LName
Zwroty:
ID | FName | LName |
---|---|---|
2) | Jan | Johnson |
1 | James | Kowal |
4 | Johnathon | Kowal |
3) | Michael | Williams |
Aby sortować w kolejności malejącej, dodaj parametr DESC po parametrze pola, np. To samo zapytanie w kolejności malejącej LName:
SELECT Id, FName, LName FROM Employees
ORDER BY LName DESC
ZAMÓWIENIE WEDŁUG wielu pól
Dla klauzuli ORDER BY
można określić wiele pól, w kolejności rosnącej lub malejącej.
Na przykład, używając tabeli http://stackoverflow.com/documentation/sql/280/example-databases/1207/item-sales-table#t=201607211314066434211 , możemy zwrócić zapytanie sortowane według SaleDate w porządku rosnącym, oraz Ilość w porządku malejącym.
SELECT ItemId, SaleDate, Quantity
FROM [Item Sales]
ORDER BY SaleDate ASC, Quantity DESC
Zauważ, że słowo kluczowe ASC
jest opcjonalne, a wyniki są domyślnie sortowane w porządku rosnącym danego pola.
ORDER BY ze złożoną logiką
Jeśli chcemy uporządkować dane inaczej dla każdej grupy, możemy dodać składnię CASE
do ORDER BY
. W tym przykładzie chcemy zamówić pracowników z Działu 1 według nazwiska, a pracowników z Działu 2 według wynagrodzenia.
ID | FName | LName | Numer telefonu | ManagerId | DepartmentId | Wynagrodzenie | Data wynajmu |
---|---|---|---|---|---|---|---|
1 | James | Kowal | 1234567890 | ZERO | 1 | 1000 | 01-01-2002 |
2) | Jan | Johnson | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
3) | Michael | Williams | 1357911131 | 1 | 2) | 600 | 12-05-2009 |
4 | Johnathon | Kowal | 1212121212 | 2) | 1 | 500 | 24-07-2016 |
5 | Sam | Sas | 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
Zamówienie niestandardowe
Jeśli chcesz zamówić według kolumny przy użyciu czegoś innego niż uporządkowanie alfabetyczne / numeryczne, możesz użyć case
aby określić żądaną kolejność.
order by Group
zwrotów order by Group
:
Grupa | Liczyć |
---|---|
Nie wycofany | 6 |
Na emeryturze | 4 |
Całkowity | 10 |
order by case group when 'Total' then 1 when 'Retired' then 2 else 3 end
zwraca:
Grupa | Liczyć |
---|---|
Całkowity | 10 |
Na emeryturze | 4 |
Nie wycofany | 6 |