Microsoft SQL Server
SORTERA EFTER
Sök…
Anmärkningar
Syftet med ORDER BY-klausulen är att sortera data som returneras av en fråga.
Det är viktigt att notera att ordningen på rader som returneras av en fråga är odefinierad om det inte finns en ORDER BY-klausul.
Se MSDN-dokumentation för fullständig information om ORDER BY-klausulen: https://msdn.microsoft.com/en-us/library/ms188385.aspx
Enkel ORDER BY-klausul
Med tabellen Anställda nedan är ett exempel för att returnera kolumnerna Id, FName och LName i (stigande) LName-ordning:
SELECT Id, FName, LName FROM Employees
ORDER BY LName
Returns:
Id | fNAME | LNAME |
---|---|---|
2 | John | Johnson |
1 | James | Smed |
4 | Johnathon | Smed |
3 | Michael | Williams |
För att sortera i fallande ordning lägg till DESC-nyckelordet efter fältparametern, t.ex. samma fråga i LName fallande ordning är:
SELECT Id, FName, LName FROM Employees
ORDER BY LName DESC
BESTÄLL AV flera fält
Flera fält kan anges för ORDER BY
klausulen, i antingen ASCending eller DESCending order.
Med hjälp av http://stackoverflow.com/documentation/sql/280/example-databases/1207/item-sales-table#t=201607211314066434211 kan vi till exempel returnera en fråga som sorteras efter SaleDate i stigande ordning och Kvantitet i fallande ordning.
SELECT ItemId, SaleDate, Quantity
FROM [Item Sales]
ORDER BY SaleDate ASC, Quantity DESC
Observera att ASC
nyckelordet är valfritt och resultaten sorteras i stigande ordning för ett givet fält som standard.
BESTÄLLNING AV med komplex logik
Om vi vill beställa uppgifterna annorlunda för varje grupp kan vi lägga till en CASE
syntax till ORDER BY
. I det här exemplet vill vi beställa anställda från avdelning 1 efter efternamn och anställda från avdelning 2 efter lön.
Id | fNAME | LNAME | Telefonnummer | Administratörs | DepartmentId | Lön | HireDate |
---|---|---|---|---|---|---|---|
1 | James | Smed | 1234567890 | NULL | 1 | 1000 | 2002/01/01 |
2 | John | Johnson | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Michael | Williams | 1357911131 | 1 | 2 | 600 | 12-05-2009 |
4 | Johnathon | Smed | 1212121212 | 2 | 1 | 500 | 24-07-2016 |
5 | Sam | Saxon | 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
Anpassad beställning
Om du vill beställa efter en kolumn med något annat än alfabetisk / numerisk beställning kan du använda case
att ange vilken ordning du vill ha.
order by Group
returnerar:
Grupp | Räkna |
---|---|
Inte pensionerad | 6 |
Pensionerad | 4 |
Total | 10 |
order by case group when 'Total' then 1 when 'Retired' then 2 else 3 end
kommer tillbaka:
Grupp | Räkna |
---|---|
Total | 10 |
Pensionerad | 4 |
Inte pensionerad | 6 |