Megosztás a következőn keresztül:


SELECT – ORDER BY záradék (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

A lekérdezés által visszaadott adatokat az SQL Serveren rendezi. Használja ezt a záradékot a következőre:

  • Rendelje meg a lekérdezés eredményhalmazát a megadott oszloplista szerint, és igény szerint korlátozza a megadott tartományba visszaadott sorokat. Az eredményhalmazban visszaadott sorok sorrendje nem garantált, hacsak nincs megadva záradék ORDER BY .

  • Határozza meg, hogy a rangsorolási függvény értékei milyen sorrendben legyenek alkalmazva az eredményhalmazra.

Transact-SQL szintaxis konvenciók

Note

ORDER BY az Azure Synapse Analytics vagy az Analytics Platform System (PDW) nem támogatja SELECT/INTO a CREATE TABLE AS SELECT CTAS-utasításokat.

Syntax

Az SQL Server és az Azure SQL Database szintaxisa.

ORDER BY order_by_expression
    [ COLLATE collation_name ]
    [ ASC | DESC ]
    [ , ...n ]
[ <offset_fetch> ]

<offset_fetch> ::=
{
    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
    [
      FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
    ]
}

Az Azure Synapse Analytics és a párhuzamos adattárház szintaxisa.

[ ORDER BY
    {
    order_by_expression
    [ ASC | DESC ]
    } [ , ...n ]
]

Arguments

order_by_expression

Megadja azt az oszlopot vagy kifejezést, amelyen rendezni szeretné a lekérdezés eredményhalmazát. A rendezési oszlop megadható névként vagy oszlop aliasaként, vagy nem negatív egész számként, amely az oszlop helyét jelöli a kijelölési listában.

Több rendezési oszlop is megadható. Az oszlopneveknek egyedinek kell lenniük. A záradék rendezési ORDER BY oszlopainak sorrendje határozza meg a rendezett eredményhalmaz szervezetét. Ez azt jelenti, hogy az eredményhalmazt az első oszlop rendezi, majd a rendezett listát a második oszlop rendezi, és így tovább.

A záradékban ORDER BY hivatkozott oszlopneveknek egy oszlopnak vagy oszlop aliasának kell lenniük a kijelölési listában, vagy egy, a FROM záradékban megadott táblában meghatározott oszlopnak, kétértelműség nélkül. Ha a ORDER BY záradék egy oszlop aliasára hivatkozik a kijelölési listából, az oszlop aliasát önmagában ORDER BY kell használni, és nem a záradék valamely kifejezésének részeként, például:

SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName; -- correct

SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName + ''; -- wrong

COLLATION_NAME RENDEZÉSE

Azt határozza meg, hogy a műveletet a ORDER BYcollation_name megadott rendezés szerint kell végrehajtani, és nem a táblázatban vagy nézetben meghatározott oszlop rendezése szerint. A collation_name lehet Windows-rendezési név vagy SQL-rendezés neve. További információ: összehasonlítási szabályok és Unicode-támogatás. COLLATE csak karakteres, varchar, ncharés nvarcharoszlopra alkalmazható.

ASC | DESC

Megadja, hogy a megadott oszlop értékeit növekvő vagy csökkenő sorrendbe kell rendezni. ASC rendezés a legalacsonyabb értékről a legmagasabb értékre. DESC rendezés a legmagasabb értékről a legalacsonyabb értékre. ASC az alapértelmezett rendezési sorrend. NULL értékeket a rendszer a lehető legalacsonyabb értékként kezeli.

ELTOLÁS { integer_constant | offset_row_count_expression } { SOR | SOROK }

A következőkre vonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány.

Megadja a kihagyandó sorok számát, mielőtt sorokat ad vissza a lekérdezési kifejezésből. Az érték lehet olyan egész számállandó vagy kifejezés, amely nagyobb vagy egyenlő nullánál.

offset_row_count_expression lehet változó, paraméter vagy állandó skaláris alquery. Ha al lekérdezést használ, nem hivatkozhat a külső lekérdezés hatókörében definiált oszlopokra. Vagyis nem lehet korrelálni a külső lekérdezéssel.

ROW szinonimák ROWS , és az ANSI-kompatibilitást biztosítják.

A lekérdezés-végrehajtási tervekben az eltolássorok száma a lekérdezési operátor Eltolás attribútumában TOP jelenik meg.

FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { SOR | SOROK } CSAK

A következőkre vonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány.

Megadja a záradék feldolgozása után OFFSET visszaadandó sorok számát. Az érték lehet egy olyan egész számállandó vagy kifejezés, amely egynél nagyobb vagy egyenlő.

fetch_row_count_expression lehet változó, paraméter vagy állandó skaláris alquery. Ha al lekérdezést használ, nem hivatkozhat a külső lekérdezés hatókörében definiált oszlopokra. Vagyis nem lehet korrelálni a külső lekérdezéssel.

FIRST szinonimák NEXT , és az ANSI-kompatibilitást biztosítják.

ROW szinonimák ROWS , és az ANSI-kompatibilitást biztosítják.

A lekérdezés-végrehajtási tervekben az eltolássorok száma a lekérdezési operátor Sorok vagy Felső attribútumában TOP jelenik meg.

Ajánlott eljárások

Ne adjon meg egész számokat a ORDER BY záradékban a kijelölési lista oszlopainak pozícióiként. Bár például egy ilyen SELECT ProductID, Name FROM Production.Production ORDER BY 2 utasítás érvényes, mások nem értik olyan könnyen az utasítást, mint a tényleges oszlopnév megadása. Emellett a kijelölési lista módosítása ( például az oszlopsorrend módosítása vagy új oszlopok hozzáadása) megköveteli a záradék módosítását a ORDER BY váratlan eredmények elkerülése érdekében.

SELECT TOP (<n>) Egy utasításban mindig használjon záradékotORDER BY. Ez az egyetlen módja annak, hogy előre jelezze, mely sorokat érinti a TOP. További információ: TOP.

Interoperability

Ha egy SELECT...INTO vagy INSERT...SELECT több utasítással más forrásból származó sorokat szúr be, a ORDER BY záradék nem garantálja, hogy a sorok a megadott sorrendbe vannak beszúrva.

A nézet használata OFFSET és FETCH használata nem módosítja a nézet frissíthetőségi tulajdonságát.

Limitations

A záradékban ORDER BY nincs korlátozva az oszlopok száma. A záradékban ORDER BY megadott oszlopok teljes mérete azonban nem haladhatja meg a 8060 bájtot.

Az ntext, szöveg, kép, földrajzi hely, geometria és xml típusú oszlopok nem használhatók záradékokban ORDER BY .

Egész szám vagy állandó nem adható meg, ha order_by_expression megjelenik egy rangsorolási függvényben. További információ: SELECT – OVER záradék.

Ha a FROM záradék egy táblanevet aliasolt, csak az aliasnév használható a ORDER BY záradék oszlopainak minősítéséhez.

A záradékban ORDER BY megadott oszlopneveket és aliasokat meg kell határozni a kijelölési listában, ha az SELECT utasítás a következő záradékok vagy operátorok egyikét tartalmazza:

  • UNION operátor
  • EXCEPT operátor
  • INTERSECT operátor
  • SELECT DISTINCT

Emellett, ha az utasítás tartalmaz egy UNION, EXCEPTvagy INTERSECT operátort, az oszlopneveket vagy oszlop aliasokat meg kell adni az első (bal oldali) lekérdezés kiválasztási listájában.

Az operátorokat vagy UNION operátorokat EXCEPTINTERSECT használó ORDER BYlekérdezések csak az utasítás végén engedélyezettek. Ez a korlátozás csak akkor érvényes, ha egy legfelső szintű lekérdezést ad megUNION, EXCEPTINTERSECT és nem al lekérdezésben. Lásd az alábbi Példák szakaszt.

A ORDER BY záradék nem érvényes nézetekben, beágyazott függvényekben, származtatott táblákban és allekérdezésekben, kivéve, ha a záradékok vagy TOPOFFSET a FETCH záradékok is meg vannak adva. Ezekben ORDER BY az objektumokban a záradék csak a záradék vagy TOPOFFSET záradékok által FETCH visszaadott sorok meghatározására szolgál. A ORDER BY záradék nem garantálja a rendezett eredményeket, ha ezek a szerkezetek lekérdezve vannak, kivéve, ha ORDER BY magát a lekérdezést is megadja.

OFFSET és FETCH nem támogatottak az indexelt nézetekben vagy a CHECK OPTION záradék használatával definiált nézetben.

OFFSET és FETCH bármely olyan lekérdezésben használható, amely lehetővé teszi TOP és ORDER BY az alábbi korlátozásokkal:

  • A OVER záradék nem támogatja és OFFSETnem támogatja FETCH a .

  • OFFSET és FETCH nem adhatók meg közvetlenül a INSERT, UPDATE, MERGEés DELETE utasításokban, de az ezekben az utasításokban meghatározott alqueryben is megadható. Például az INSERT INTO SELECT utasításban, OFFSET és FETCH az utasításban SELECT is megadható.

  • Olyan lekérdezésben, amely a lekérdezés eredményeinek sorrendjét adja meg, és csak a végső lekérdezésben adható meg, UNION vagy EXCEPT operátorokat használINTERSECT.OFFSETFETCH

  • TOP nem kombinálható OFFSET ugyanabban a lekérdezési kifejezésben ( FETCH ugyanabban a lekérdezési hatókörben).

Az ELTOLÁS és a FETCH használatával korlátozza a visszaadott sorokat

A záradék helyett OFFSET a záradékot és FETCH a TOP záradékokat kell használnia egy lekérdezésoldali megoldás implementálásához, és korlátoznia kell az ügyfélalkalmazásnak küldött sorok számát.

Lapozási OFFSET megoldásként és FETCH lapozási megoldásként a lekérdezést egyszer kell futtatnia az ügyfélalkalmazásnak visszaadott minden egyes adatoldalon . Ha például egy lekérdezés eredményeit 10 sornyi növekményben szeretné visszaadni, a lekérdezést egyszer kell végrehajtania az 1–10. sorok visszaadásához, majd a lekérdezés újrafuttatásával visszaadhatja a 11–20. sorokat, és így tovább. Minden lekérdezés független, és semmilyen módon nem kapcsolódik egymáshoz. Ez azt jelenti, hogy a kurzortól eltérően, amelyben a lekérdezést egyszer hajtják végre, és az állapot a kiszolgálón van fenntartva, az ügyfélalkalmazás felelős az állapot nyomon követéséért. Ahhoz, hogy stabil eredményeket lehessen elérni a lekérdezési kérelmek között az és OFFSEThasználatávalFETCH, a következő feltételeknek kell teljesülniük:

  1. A lekérdezés által használt mögöttes adatok nem módosíthatók. Vagyis a lekérdezés által érintett sorok nem frissülnek, vagy a lekérdezés lapjaira vonatkozó összes kérés egyetlen tranzakcióban, pillanatkép vagy szerializálható tranzakcióelkülönítés használatával lesz végrehajtva. A tranzakcióelkülönítési szintekről további információt a TRANZAKCIÓELKÜLÖNÍTÉSI SZINT BEÁLLÍTÁSA című témakörben talál.

  2. A ORDER BY záradék olyan oszlopot vagy oszlopkombinációt tartalmaz, amely garantáltan egyedi.

Tekintse meg a cikk későbbi, Példák szakaszában található "Több lekérdezés futtatása egyetlen tranzakcióban" című példát.

Ha a lapozási megoldásban fontos a konzisztens végrehajtási tervek használata, fontolja meg a OPTIMIZE FOR lekérdezési tipp és OFFSET a FETCH paraméterek használatát. Lásd a cikk későbbi, Példák szakaszában az ELTOLÁS és a FETCH értékek kifejezéseinek megadása című szakaszt. További információ: OPTIMIZE FORLekérdezési tippek.

Examples

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

Category Kiemelt szintaxiselemek
Alapvető szintaxis ORDER BY
Növekvő és csökkenő sorrend megadása DESC vagy ASC
Rendezés megadása COLLATE
Feltételes sorrend megadása CASE kifejezés
AZ ORDER BY használata rangsorolási függvényben Rangsorolási függvények
A visszaadott sorok számának korlátozása OFFSET és FETCH
A ORDER BY használata a UNION, a EXCEPT és az INTERSECT használatával UNION

Alapszintű szintaxis

Az ebben a szakaszban szereplő példák a ORDER BY záradék alapvető funkcióit mutatják be a minimálisan szükséges szintaxis használatával.

A. A kiválasztási listában definiált egyetlen oszlop megadása

Az alábbi példa a numerikus ProductID oszlop által beállított eredményt rendeli el. Mivel nincs megadva egy adott rendezési sorrend, a rendszer az alapértelmezett (növekvő sorrendet) használja.

USE AdventureWorks2022;
GO

SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;

B. Olyan oszlop megadása, amely nincs definiálva a kijelölési listában

Az alábbi példa egy olyan oszlopban rendeli el az eredményt, amely nem szerepel a kiválasztási listában, de a záradékban megadott táblában FROM van definiálva.

USE AdventureWorks2022;
GO

SELECT ProductID, Name, Color
FROM Production.Product
ORDER BY ListPrice;

C. Alias megadása rendezési oszlopként

Az alábbi példa az oszlop aliasát SchemaName adja meg rendezési sorrend oszlopként.

USE AdventureWorks2022;
GO

SELECT name, SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;

D. Kifejezés megadása rendezési oszlopként

Az alábbi példa egy kifejezést használ rendezési oszlopként. A kifejezés úgy van definiálva, hogy a DATEPART függvény segítségével rendezi az eredményeket az alkalmazottak alkalmazásának éve szerint.

USE AdventureWorks2022;
GO

SELECT BusinessEntityID, JobTitle, HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);

Növekvő és csökkenő rendezési sorrend megadása

A. Csökkenő sorrend megadása

Az alábbi példa csökkenő sorrendbe rendezi a numerikus oszlop ProductID által beállított eredményt.

USE AdventureWorks2022;
GO

SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

B. Növekvő sorrend megadása

Az alábbi példa növekvő sorrendbe rendezi az Name oszlop által beállított eredményt. A karakterek betűrendbe vannak rendezve, nem numerikusan. Vagyis 10 rendezés 2 előtt.

USE AdventureWorks2022;
GO

SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC;

C. Növekvő és csökkenő sorrend megadása

Az alábbi példa két oszlop szerint rendezi az eredményt. A lekérdezés eredményhalmazát először növekvő sorrendben rendezi az FirstName oszlop, majd az oszlop csökkenő sorrendbe rendezi LastName .

USE AdventureWorks2022;
GO

SELECT LastName, FirstName
FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC;

Rendezés megadása

Az alábbi példa bemutatja, hogy a ORDER BY záradékban lévő rendezés megadása hogyan módosíthatja a lekérdezési eredmények visszaadásának sorrendjét. Létrejön egy tábla, amely egy kis- és nagybetűk megkülönböztetésével definiált oszlopot tartalmaz. Az értékek különböző kis- és nagybetűkkel vannak beszúrva. Mivel nincs megadva rendezés a ORDER BY záradékban, az első lekérdezés az oszlop rendezését használja az értékek rendezésekor. A második lekérdezésben a záradék egy kis- és nagybetűkre érzékeny rendezést határoz meg ORDER BY , amely módosítja a sorok visszaadásának sorrendjét.

USE tempdb;
GO

CREATE TABLE #t1 (name NVARCHAR(15) COLLATE Latin1_General_CI_AI);
GO

INSERT INTO #t1
VALUES (N'Sánchez'),
    (N'Sanchez'),
    (N'sánchez'),
    (N'sanchez');

-- This query uses the collation specified for the column 'name' for sorting.
SELECT name
FROM #t1
ORDER BY name;

-- This query uses the collation specified in the ORDER BY clause for sorting.
SELECT name
FROM #t1
ORDER BY name COLLATE Latin1_General_CS_AS;

Feltételes sorrend megadása

Az alábbi példák egy CASE záradék kifejezésével ORDER BY feltételesen határozzák meg a sorok rendezési sorrendjét egy adott oszlopérték alapján. Az első példában a tábla oszlopában SalariedFlag lévő HumanResources.Employee érték kiértékelése történik. SalariedFlag Az 1 értékű alkalmazottakat csökkenő sorrendben adja vissza a BusinessEntityID rendszer. SalariedFlag A 0 értékre beállított alkalmazottakat növekvő sorrendben adja vissza a BusinessEntityID rendszer. A második példában az eredményhalmazt az oszlop TerritoryName rendezi, ha az oszlop CountryRegionName egyenlő az "Egyesült Államok" és CountryRegionName az összes többi sor esetében.

SELECT BusinessEntityID,
    SalariedFlag
FROM HumanResources.Employee
ORDER BY
    CASE SalariedFlag
        WHEN 1 THEN BusinessEntityID
    END DESC,
    CASE 
        WHEN SalariedFlag = 0 THEN BusinessEntityID
    END;
GO
SELECT BusinessEntityID,
    LastName,
    TerritoryName,
    CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY
    CASE CountryRegionName
        WHEN 'United States' THEN TerritoryName
        ELSE CountryRegionName
    END;

AZ ORDER BY használata rangsorolási függvényben

Az alábbi példa a ORDER BY rangsorolási függvények ROW_NUMBERzáradékát használja , RANKDENSE_RANKés NTILE.

USE AdventureWorks2022;
GO

SELECT p.FirstName,
    p.LastName,
    ROW_NUMBER() OVER (ORDER BY a.PostalCode) AS "Row Number",
    RANK() OVER (ORDER BY a.PostalCode) AS "Rank",
    DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank",
    NTILE(4) OVER (ORDER BY a.PostalCode) AS "Quartile",
    s.SalesYTD,
    a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
    ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
    ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
    AND SalesYTD <> 0;

A visszaadott sorok számának korlátozása

A következőkre vonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány.

Az alábbi példák a lekérdezés által visszaadott sorok számát használják OFFSET és FETCH korlátozzák.

A. Az ELTOLÁS és a FETCH értékek egész számállandóinak megadása

Az alábbi példa egy egész számállandót határoz meg a záradékok és OFFSET a FETCH záradékok értékeként. Az első lekérdezés az oszlop DepartmentIDszerint rendezett összes sort adja vissza. Hasonlítsa össze a lekérdezés által visszaadott eredményeket az azt követő két lekérdezés eredményével. A következő lekérdezés a záradék OFFSET 5 ROWS használatával kihagyja az első öt sort, és visszaadja az összes többi sort. Az utolsó lekérdezés a záradékot OFFSET 0 ROWS használja az első sorra való kezdéshez, majd a visszaadott sorok 10 sorra való korlátozására a FETCH NEXT 10 ROWS ONLY rendezett eredményhalmazból.

USE AdventureWorks2022;
GO

-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;

-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;

-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;

B. Az ELTOLÁS és a FETCH értékek változóinak megadása

Az alábbi példa deklarálja a változókat@RowsToSkip, és @FetchRows megadja ezeket a változókat a és OFFSET a FETCH záradékokban.

USE AdventureWorks2022;
GO

-- Specifying variables for OFFSET and FETCH values
DECLARE
    @RowsToSkip TINYINT = 2,
    @FetchRows TINYINT = 8;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;

C. Az ELTOLÁS és a FETCH értékek kifejezéseinek megadása

Az alábbi példa a kifejezéssel @StartingRowNumber - 1 adja meg az OFFSET értéket, a kifejezés @EndingRowNumber - @StartingRowNumber + 1 pedig a FETCH értéket. Emellett a lekérdezési tipp OPTIMIZE FORis meg van adva. Ez a tipp egy helyi változó adott értékének megadására használható a lekérdezés lefordításakor és optimalizálásakor. Az érték csak a lekérdezés optimalizálása során használatos, a lekérdezés végrehajtásakor nem. További információ: Lekérdezési tippek.

USE AdventureWorks2022;
GO

-- Specifying expressions for OFFSET and FETCH values
DECLARE
    @StartingRowNumber TINYINT = 1,
    @EndingRowNumber TINYINT = 8;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @EndingRowNumber - @StartingRowNumber + 1 ROWS ONLY
OPTION (OPTIMIZE FOR (@StartingRowNumber = 1, @EndingRowNumber = 20));

D. Állandó skaláris allekérdezés megadása AZ ELTOLÁS és a FETCH értékekhez

Az alábbi példa egy állandó skaláris alquery használatával határozza meg a FETCH záradék értékét. Az al lekérdezés egyetlen értéket ad vissza a tábla PageSizeoszlopábóldbo.AppSettings.

-- Specifying a constant scalar subquery
USE AdventureWorks2022;
GO

CREATE TABLE dbo.AppSettings (
    AppSettingID INT NOT NULL,
    PageSize INT NOT NULL
);
GO

INSERT INTO dbo.AppSettings
VALUES (1, 10);
GO

DECLARE @StartingRowNumber TINYINT = 1;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber ROWS
FETCH NEXT (
    SELECT PageSize
    FROM dbo.AppSettings
    WHERE AppSettingID = 1
) ROWS ONLY;

E. Több lekérdezés futtatása egyetlen tranzakcióban

Az alábbi példa egy lapozómegoldás implementálásának egyik módszerét mutatja be, amely biztosítja, hogy a rendszer stabil eredményeket adjon vissza a lekérdezés összes kérésében. A lekérdezés egyetlen tranzakcióban, a pillanatkép-elkülönítési szinttel lesz végrehajtva, és a záradékban megadott oszlop biztosítja az ORDER BY oszlopok egyediségét.

USE AdventureWorks2022;
GO

-- Ensure the database can support the snapshot isolation level set for the query.
IF (
    SELECT snapshot_isolation_state
    FROM sys.databases
    WHERE name = N'AdventureWorks2022'
) = 0
ALTER DATABASE AdventureWorks2022
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

-- Set the transaction isolation level  to SNAPSHOT for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO

-- Beginning the transaction.
BEGIN TRANSACTION;
GO

-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE
    @StartingRowNumber INT = 1,
    @RowCountPerPage INT = 3;

-- Create the condition to stop the transaction after all rows have been returned.
WHILE (
    SELECT COUNT(*)
    FROM HumanResources.Department
) >= @StartingRowNumber
BEGIN
    -- Run the query until the stop condition is met.
    SELECT DepartmentID, Name, GroupName
    FROM HumanResources.Department
    ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
    FETCH NEXT @RowCountPerPage ROWS ONLY;

    -- Increment @StartingRowNumber value.
    SET @StartingRowNumber = @StartingRowNumber + @RowCountPerPage;

    CONTINUE
END;
GO

COMMIT TRANSACTION;
GO

A ORDER BY használata a UNION, a EXCEPT és az INTERSECT használatával

Ha egy lekérdezés a UNION, EXCEPTvagy INTERSECT operátorokat használja, a záradékot az ORDER BY utasítás végén kell megadni, és az egyesített lekérdezések eredményeinek rendezése történik. Az alábbi példa az összes piros vagy sárga terméket visszaadja, és az oszlop ListPriceszerint rendezi a kombinált listát.

USE AdventureWorks2022;
GO

SELECT Name, Color, ListPrice
FROM Production.Product
WHERE Color = 'Red'
-- ORDER BY cannot be specified here.

UNION ALL

SELECT Name, Color, ListPrice
FROM Production.Product
WHERE Color = 'Yellow'
ORDER BY ListPrice ASC;

Példák: Azure Synapse Analytics and Analytics Platform System (PDW)

Az alábbi példa azt mutatja be, hogy a numerikus EmployeeKey oszlop által beállított eredmény növekvő sorrendben van-e rendezve.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;

Az alábbi példa csökkenő sorrendbe rendezi a numerikus EmployeeKey oszlop által beállított eredményt.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;

Az alábbi példa az oszlop által beállított eredményt rendeli LastName meg.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;

Az alábbi példa két oszlop szerint rendezi a rendeléseket. Ez a lekérdezés először növekvő sorrendben rendezi az FirstName oszlopot, majd csökkenő sorrendben rendezi a gyakori FirstName értékeket az LastName oszlop szerint.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;