Zoeken…


Basics

Laten we eerst de voorbeeldtabel instellen.

-- Create a table as an example
CREATE TABLE SortOrder
(
    ID INT IDENTITY PRIMARY KEY,
    [Text] VARCHAR(256)
)
GO

-- Insert rows into the table
INSERT INTO SortOrder ([Text]) 
SELECT ('Lorem ipsum dolor sit amet, consectetur adipiscing elit')
UNION ALL SELECT ('Pellentesque eu dapibus libero')
UNION ALL SELECT ('Vestibulum et consequat est, ut hendrerit ligula')
UNION ALL SELECT ('Suspendisse sodales est congue lorem euismod, vel facilisis libero pulvinar')
UNION ALL SELECT ('Suspendisse lacus est, aliquam at varius a, fermentum nec mi')
UNION ALL SELECT ('Praesent tincidunt tortor est, nec consequat dolor malesuada quis')
UNION ALL SELECT ('Quisque at tempus arcu')
GO

Vergeet niet dat bij het ophalen van gegevens, als je niet een rij te bestellen clausule specificeren (ORDER BY) SQL server garandeert niet dat de sortering (volgorde van de kolommen) op elk moment. Echt waar, op elk moment. En het heeft geen zin daar ruzie over te maken, het is letterlijk duizenden keren en overal op internet getoond.

Geen BESTELLING DOOR == geen sortering. Einde verhaal.

-- It may seem the rows are sorted by identifiers, 
-- but there is really no way of knowing if it will always work.
-- And if you leave it like this in production, Murphy gives you a 100% that it wont.
SELECT * FROM SortOrder
GO

Er zijn twee richtingen gegevens kunnen worden besteld door:

  • oplopend (omhoog) met ASC
  • aflopend (omlaag) met DESC
-- Ascending - upwards
SELECT * FROM SortOrder ORDER BY ID ASC
GO

-- Ascending is default
SELECT * FROM SortOrder ORDER BY ID
GO

-- Descending - downwards
SELECT * FROM SortOrder ORDER BY ID DESC
GO

Let bij het bestellen op de tekstkolom ((n) char of (n) varchar) erop dat de volgorde de sortering respecteert. Kijk voor meer informatie over het sorteren op het onderwerp.

Bestellen en sorteren van gegevens kan bronnen verbruiken. Dit is waar correct gemaakte indexen van pas komen. Zoek voor meer informatie over indexen naar het onderwerp.

Er is een mogelijkheid om de volgorde van rijen in uw resultatenset pseudo-willekeurig te maken. Forceer gewoon de volgorde om niet-deterministisch te verschijnen.

SELECT * FROM SortOrder ORDER BY CHECKSUM(NEWID())
GO

Bestellen kan worden onthouden in een opgeslagen procedure en dat is de manier waarop u het moet doen als dit de laatste stap is van het manipuleren van de rijen voordat u het aan de eindgebruiker laat zien.

CREATE PROCEDURE GetSortOrder
AS
    SELECT * 
    FROM SortOrder 
    ORDER BY ID DESC
GO

EXEC GetSortOrder
GO

Er is ook een beperkte (en hacky) ondersteuning voor bestellen in de SQL Server-weergaven, maar wordt aangemoedigd deze NIET te gebruiken.

/* This may or may not work, and it depends on the way 
   your SQL Server and updates are installed */
CREATE VIEW VwSortOrder1
AS
    SELECT TOP 100 PERCENT * 
    FROM SortOrder 
    ORDER BY ID DESC
GO

SELECT * FROM VwSortOrder1
GO

-- This will work, but hey... should you really use it?
CREATE VIEW VwSortOrder2
AS
    SELECT TOP 99999999 * 
    FROM SortOrder 
    ORDER BY ID DESC
GO

SELECT * FROM VwSortOrder2
GO

Om te bestellen kunt u kolomnamen, aliassen of kolomnummers gebruiken in uw BESTELLING BIJ.

SELECT * 
FROM SortOrder 
ORDER BY [Text]

-- New resultset column aliased as 'Msg', feel free to use it for ordering
SELECT ID, [Text] + ' (' + CAST(ID AS nvarchar(10)) + ')' AS Msg
FROM SortOrder 
ORDER BY Msg

-- Can be handy if you know your tables, but really NOT GOOD for production
SELECT * 
FROM SortOrder 
ORDER BY 2

Ik raad af om de nummers in uw code te gebruiken, behalve als u het wilt vergeten op het moment nadat u het uitvoert.

Bestel per geval

Als u uw gegevens numeriek of alfabetisch wilt sorteren, kunt u eenvoudig sorteren order by [column] . Als u wilt sorteren met een aangepaste hiërarchie, gebruikt u een case-instructie.

Group
-----
Total
Young
MiddleAge
Old
Male
Female

Een basisbestelling gebruiken order by :

Select * from MyTable
Order by Group

geeft een alfabetische soort terug, wat niet altijd wenselijk is:

Group
-----
Female
Male
MiddleAge
Old    
Total
Young

Een 'case'-instructie toevoegen, stijgende numerieke waarden toewijzen in de volgorde waarin u uw gegevens wilt sorteren:

Select * from MyTable
Order by case Group
    when 'Total' then 10
    when 'Male' then 20
    when 'Female' then 30
    when 'Young' then 40
    when 'MiddleAge' then 50
    when 'Old' then 60
    end

retourneert gegevens in de opgegeven volgorde:

Group
-----
Total
Male
Female
Young
MiddleAge
Old


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow