Sdílet prostřednictvím


SELECT - ORDER BY – klauzule (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Seřadí data vrácená dotazem na SQL Serveru. Pomocí této klauzule můžete:

  • Seřazení sady výsledků dotazu podle zadaného seznamu sloupců a volitelně omezení řádků vrácených do zadané oblasti. Pořadí, ve kterém jsou řádky vráceny v sadě výsledků, není zaručeno, pokud ORDER BY není zadána klauzule.

  • Určete pořadí, ve kterém se hodnoty funkce řazení použijí na sadu výsledků.

Transact-SQL konvence syntaxe

Note

ORDER BY nepodporuje SELECT/INTO příkazy CTAS CREATE TABLE AS SELECT (Azure Synapse Analytics) nebo PdW (Analytics Platform System).

Syntax

Syntaxe pro SQL Server a Azure SQL Database

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
    ]
}

Syntaxe pro Systém platformy Azure Synapse Analytics a Analytics (PDW):

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

Arguments

order_by_expression

Určuje sloupec nebo výraz, podle kterého se má sada výsledků dotazu seřadit. Sloupec řazení můžete zadat jako alias názvu nebo sloupce nebo jako nezáporné celé číslo představující pozici sloupce v seznamu výběru.

Můžete zadat více sloupců řazení. Názvy sloupců musí být jedinečné. Posloupnost sloupců řazení v ORDER BY klauzuli definuje uspořádání seřazené sady výsledků. Sada výsledků se seřadí podle prvního sloupce a pak se seřazený seznam seřadí podle druhého sloupce atd.

Názvy sloupců, na které odkazujete v ORDER BY klauzuli, musí odpovídat aliasu sloupce nebo sloupce v seznamu select nebo sloupci definovanému v tabulce zadané v FROM klauzuli bez nejednoznačností. ORDER BY Pokud klauzule odkazuje na alias sloupce ze seznamu select, použijte vlastní alias sloupce. Nepoužívejte alias sloupce jako součást výrazu v klauzuli ORDER BY .

Například:

  • Správné použití:

    SELECT SCHEMA_NAME(schema_id) AS SchemaName
    FROM sys.objects
    ORDER BY SchemaName; -- correct
    
  • Nesprávné použití:

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

COLLATION_NAME COLLATE

Určuje, že ORDER BY operace by měla být provedena podle kolace, kterou zadáte v collation_name, a ne podle kolace sloupce definovaného v tabulce nebo zobrazení. Collation_name může být buď název kolace Systému Windows, nebo název kolace SQL. Další informace najdete v tématu podpora kolace a kódování Unicode. COLLATE platí pouze pro sloupce typu char, varchar, nchara nvarchar.

ASC | DESC

Určuje, že hodnoty v zadaném sloupci by měly být seřazeny vzestupně nebo sestupně. ASC seřadí od nejnižší hodnoty k nejvyšší hodnotě. DESC seřadí od nejvyšší hodnoty k nejnižší hodnotě. ASC je výchozí pořadí řazení. NULL hodnoty jsou považovány za nejnižší možné hodnoty.

POSUN { integer_constant offset_row_count_expression | } { ŘÁDEK | ŘÁDKY }

Platí pro: SQL Server 2012 (11.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.

Určuje počet řádků, které se mají přeskočit před tím, než dotaz začne vracet řádky z výrazu dotazu. Hodnota může být celočíselná konstanta nebo výraz, který je větší nebo roven nule.

offset_row_count_expression může být proměnná, parametr nebo konstantní skalární poddotaz. Když použijete poddotaz, nemůže odkazovat na žádné sloupce definované v oboru vnějšího dotazu. To znamená, že nemůže být korelován s vnějším dotazem.

ROW a ROWS jsou synonyma a jsou poskytovány pro kompatibilitu ANSI.

V plánech provádění dotazů se hodnota počtu řádků posunu zobrazí v atributu Posun operátoru TOP dotazu.

FETCH { FIRST | NEXT } { integer_constant fetch_row_count_expression | } { ŘÁDEK | POUZE ŘÁDKY }

Platí pro: SQL Server 2012 (11.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.

Určuje počet řádků, které se mají vrátit po OFFSET zpracování klauzule. Hodnota může být celočíselná konstanta nebo výraz, který je větší nebo roven jedné.

fetch_row_count_expression může být proměnná, parametr nebo konstantní skalární poddotaz. Když použijete poddotaz, nemůže odkazovat na žádné sloupce definované v oboru vnějšího dotazu. To znamená, že nemůže být korelován s vnějším dotazem.

FIRST a NEXT jsou synonyma a jsou poskytovány pro kompatibilitu ANSI.

ROW a ROWS jsou synonyma a jsou poskytovány pro kompatibilitu ANSI.

V plánech provádění dotazů se hodnota počtu odsazení řádků zobrazí v atributu Řádky nebo Horní atribut operátoru TOP dotazu.

Osvědčené postupy

Vyhněte se zadávání celých čísel v ORDER BY klauzuli jako poziční reprezentace sloupců v seznamu select. I když je například příkaz SELECT ProductID, Name FROM Production.Production ORDER BY 2 platný, může být pro uživatele obtížné porozumět v porovnání s určením skutečného názvu sloupce. Kromě toho změny v seznamu výběrů, například změna pořadí sloupců nebo přidání nových sloupců, vyžadují úpravu ORDER BY klauzule, aby nedocházelo k neočekávaným výsledkům.

SELECT TOP (<n>) V příkazu vždy použijte klauzuliORDER BY. Toto je jediný způsob, jak předpovědět, které řádky TOP ovlivňují. Další informace najdete v tématu TOP.

Interoperability

Pokud použijete ORDER BY s příkazem SELECT...INTO nebo INSERT...SELECT vložíte řádky z jiného zdroje, klauzule nezaručuje, ORDER BY že se řádky vloží do zadaného pořadí.

Použití OFFSET a FETCH v zobrazení nemění vlastnost aktualizovatelnosti zobrazení.

Limitations

Počet sloupců v ORDER BY klauzuli není nijak omezený. Celková velikost sloupců zadaných v ORDER BY klauzuli však nesmí překročit 8 060 bajtů.

V klauzuli nelze použít sloupce typu ntext, text, obrázek, geografie, geometrie nebo xmlORDER BY.

Pokud se order_by_expression zobrazí ve funkci řazení, nemůžete zadat celé číslo ani konstantu. Další informace naleznete v tématu SELECT - OVER klauzule.

Pokud v klauzuli aliasujete název FROM tabulky, musíte použít název aliasu pro kvalifikaci sloupců v klauzuli ORDER BY .

SELECT Pokud příkaz obsahuje jednu z následujících klauzulí nebo operátorů, musíte definovat názvy sloupců a aliasy zadané v ORDER BY klauzuli v seznamu select:

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

Kromě toho, když příkaz obsahuje UNION, EXCEPTnebo INTERSECT operátor, výběrový seznam prvního (levého) dotazu musí určovat názvy sloupců nebo aliasy sloupců.

V dotazu, který používá UNION, EXCEPTnebo INTERSECT operátory, můžete použít ORDER BY pouze na konci příkazu. Toto omezení platí pouze v případě, že zadáte UNION, EXCEPTa INTERSECT v dotazu nejvyšší úrovně, a ne v poddotazu. Viz část Příklady .

Klauzule ORDER BY není platná v zobrazeních, vložených funkcích, odvozených tabulkách a poddotazech, pokud nezadáte ani TOP klauzule nebo OFFSETFETCH klauzule. Při použití ORDER BY v těchto objektech se klauzule používá pouze k určení řádků vrácených TOP klauzulí nebo OFFSETFETCH klauzulí. Klauzule ORDER BY nezaručuje seřazené výsledky při dotazování těchto konstruktorů, pokud ORDER BY není také zadána v samotném dotazu.

OFFSET a FETCH nejsou podporovány v indexovaných zobrazeních nebo v zobrazení, které je definováno pomocí CHECK OPTION klauzule.

OFFSET a FETCH lze ho použít v libovolném dotazu, který umožňuje TOP a ORDER BY s následujícími omezeními:

  • Klauzule OVER nepodporuje OFFSET a FETCH.

  • Nemůžete zadat OFFSET a FETCH přímo v INSERT, UPDATE, MERGEa DELETE příkazy, ale můžete je zadat v poddotaz definovaných v těchto příkazech. Například v INSERT INTO SELECT příkazu můžete zadat OFFSET a FETCH v SELECT příkazu.

  • V dotazu, který používá UNION, EXCEPT nebo INTERSECT operátory, pouze konečný dotaz, který určuje pořadí výsledků dotazu může zadat OFFSET a FETCH.

  • Nemůžete kombinovat TOP s OFFSET a FETCH ve stejném výrazu dotazu (ve stejném oboru dotazu).

Omezení vrácených řádků pomocí posunu a funkce FETCH

OFFSET FETCH Místo klauzule použijte klauzule TOP k implementaci stránkovacího řešení dotazu a omezení počtu řádků odesílaných do klientské aplikace.

Použití OFFSET a FETCH jako stránkovací řešení vyžaduje jedno spuštění dotazu pro každou stránku dat vrácených do klientské aplikace. Pokud například chcete vrátit výsledky dotazu v přírůstcích po 10 řádcích, musíte dotaz spustit jednou, aby se vrátily řádky 1 až 10, a pak dotaz znovu spusťte, aby se vrátily řádky 11 až 20 atd. Každý dotaz je nezávislý a nesouvisí mezi sebou žádným způsobem. Tato podmínka znamená, že na rozdíl od použití kurzoru, ve kterém je dotaz spuštěn jednou a stav je udržován na serveru, je klientská aplikace zodpovědná za sledování stavu. Aby bylo možné dosáhnout stabilních výsledků mezi požadavky na dotazy, které používají OFFSET , a FETCHmusí být splněny následující podmínky:

  1. Podkladová data, která dotaz používá, se nemění. To znamená, že dotaz neaktualizuje řádky nebo všechny požadavky na stránky z dotazu spuštěné v jedné transakci pomocí snímku nebo serializovatelné izolace transakce. Další informace o těchto úrovních izolace transakcí naleznete v tématu SET TRANSACTION ISOLATION LEVEL.

  2. Klauzule ORDER BY obsahuje sloupec nebo kombinaci sloupců, u kterých je zaručeno, že budou jedinečné.

Podívejte se na příklad Spuštění více dotazů v jedné transakci v části Příklady .

Pokud jsou ve stránkovacím řešení důležité konzistentní plány provádění, zvažte použití nápovědy OPTIMIZE FOR k dotazu pro parametry OFFSET a FETCH parametry. Viz Zadání výrazů pro hodnoty OFFSET a FETCH v části Příklady . Další informace naleznete v OPTIMIZE FORtématu Nápovědy k dotazům.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

Category Doporučené prvky syntaxe
Základní syntaxe ORDER BY
Určení vzestupného a sestupného pořadí DESC nebo ASC
Určení kolace COLLATE
Zadání podmíněného pořadí výraz CASE
Použití FUNKCE ORDER BY ve funkci řazení Funkce řazení
Omezení počtu vrácených řádků OFFSET a FETCH
Použití FUNKCE ORDER BY se UNION, EXCEPT a INTERSECT UNION

Základní syntaxe

Příklady v této části ukazují základní funkce klauzule ORDER BY pomocí minimální požadované syntaxe.

A. Zadání jednoho sloupce definovaného v seznamu výběru

Následující příklad objedná výsledek nastavený číselným ProductID sloupcem. Vzhledem k tomu, že nezadáte pořadí řazení, použije dotaz výchozí vzestupné pořadí.

USE AdventureWorks2025;
GO

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

B. Zadejte sloupec, který není definován v seznamu výběru.

Následující příklad objedná sadu výsledků podle sloupce, který seznam select neobsahuje, ale FROM klauzule určuje tabulku, která obsahuje sloupec.

USE AdventureWorks2025;
GO

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

C. Zadání aliasu jako sloupce řazení

Následující příklad určuje alias SchemaName sloupce jako sloupec pořadí řazení.

USE AdventureWorks2025;
GO

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

D. Zadání výrazu jako sloupce řazení

Následující příklad používá výraz jako sloupec řazení. Výraz je definován pomocí DATEPART funkce k seřazení výsledků nastavených podle roku, ve kterém byli zaměstnanci přijati.

USE AdventureWorks2025;
GO

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

Určení vzestupného a sestupného pořadí řazení

A. Zadání sestupně seřazeného pořadí

Následující příklad objedná sadu výsledků podle číselného sloupce ProductID v sestupném pořadí.

USE AdventureWorks2025;
GO

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

B. Zadání vzestupného pořadí

Následující příklad seřídí sadu výsledků podle Name sloupce ve vzestupném pořadí. Znaky jsou seřazené abecedně, ne číselně. To znamená, že 10 seřadí před 2.

USE AdventureWorks2025;
GO

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

C. Určení vzestupného i sestupného pořadí

Následující příklad objedná výsledek nastavený dvěma sloupci. Sada výsledků dotazu se nejprve seřadí ve vzestupném pořadí podle FirstName sloupce a potom seřadí sestupně podle LastName sloupce.

USE AdventureWorks2025;
GO

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

Určení kolace

Následující příklad ukazuje, jak určení kolace v ORDER BY klauzuli může změnit pořadí, ve kterém se vrátí výsledky dotazu. Vytvoří se tabulka, která obsahuje sloupec definovaný pomocí nerozlišující velká a malá písmena bez rozlišování zvýrazňující kolace. Hodnoty se vkládají s různými písmeny a rozdíly diakritiky. Protože kolace není v klauzuli zadaná ORDER BY , první dotaz při řazení hodnot použije kolaci sloupce. V druhém dotazu je v klauzuli zadána ORDER BY kolace s rozlišováním velkých a malých písmen, která mění pořadí, ve kterém jsou řádky vráceny.

USE tempdb;
GO

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

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;

Zadání podmíněného pořadí

Následující příklady používají CASE výraz v ORDER BY klauzuli k podmíněnému určení pořadí řazení řádků na základě dané hodnoty sloupce. V prvním příkladu se vyhodnotí hodnota ve SalariedFlag sloupci HumanResources.Employee tabulky. Zaměstnanci, kteří mají nastavenou SalariedFlag hodnotu 1, se vrátí v pořadí sestupně BusinessEntityID . Zaměstnanci, kteří mají nastavenou SalariedFlag hodnotu 0, se vrátí v pořadí BusinessEntityID vzestupně. V druhém příkladu je sada výsledků seřazena podle sloupce TerritoryName , pokud se sloupec CountryRegionName rovná "Spojené státy" a podle CountryRegionName všech ostatních řádků.

SELECT BusinessEntityID,
       SalariedFlag
FROM HumanResources.Employee
ORDER BY
    CASE SalariedFlag
        WHEN 1 THEN BusinessEntityID
    END DESC,
    CASE
        WHEN SalariedFlag = 0 THEN BusinessEntityID
    END;
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;

Použití FUNKCE ORDER BY ve funkci řazení

Následující příklad používá klauzuli ORDER BY ve funkcích ROW_NUMBERřazení , RANK, DENSE_RANKa NTILE.

USE AdventureWorks2025;
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;

Omezení počtu vrácených řádků

Platí pro: SQL Server 2012 (11.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.

Následující příklady používají OFFSET a FETCH omezují počet řádků vrácených dotazem.

A. Zadejte celočíselné konstanty pro hodnoty OFFSET a FETCH.

Následující příklad určuje celočíselnou konstantu jako hodnotu pro OFFSET klauzule a FETCH klauzule. První dotaz vrátí všechny řádky seřazené podle sloupce DepartmentID. Porovnejte výsledky vrácené tímto dotazem s výsledky dvou následujících dotazů. Další dotaz pomocí klauzule OFFSET 5 ROWS přeskočí prvních pět řádků a vrátí všechny zbývající řádky. Poslední dotaz použije klauzuli OFFSET 0 ROWS , která začíná prvním řádkem a pak použije FETCH NEXT 10 ROWS ONLY k omezení řádků vrácených na 10 řádků ze seřazené sady výsledků.

USE AdventureWorks2025;
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. Zadání proměnných pro hodnoty OFFSET a FETCH

Následující příklad deklaruje proměnné @RowsToSkip a @FetchRows určuje tyto proměnné v OFFSET klauzulích a FETCH klauzulích.

USE AdventureWorks2025;
GO

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

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

C. Zadání výrazů pro hodnoty OFFSET a FETCH

Následující příklad používá výraz @StartingRowNumber - 1 k určení OFFSET hodnoty a výraz @EndingRowNumber - @StartingRowNumber + 1 k určení FETCH hodnoty. Kromě toho je zadána nápověda OPTIMIZE FORdotazu. Tento tip použijte k poskytnutí konkrétní hodnoty pro místní proměnnou při kompilaci a optimalizaci dotazu. Hodnota se používá pouze při optimalizaci dotazu, a ne během provádění dotazu. Další informace najdete v tématu Nápovědy k dotazům.

USE AdventureWorks2025;
GO

-- Specifying expressions for OFFSET and FETCH values
DECLARE @StartingRowNumber AS TINYINT = 1,
        @EndingRowNumber AS 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. Zadání konstantního skalárního poddotazu pro hodnoty OFFSET a FETCH

Následující příklad používá konstantní skalární poddotaz k definování hodnoty klauzule FETCH . Poddotaz vrátí jednu hodnotu ze sloupce PageSize v tabulce dbo.AppSettings.

-- Specifying a constant scalar subquery
USE AdventureWorks2025;
GO

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

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

DECLARE @StartingRowNumber AS 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. Spuštění více dotazů v jedné transakci

Následující příklad ukazuje jednu metodu implementace stránkovacího řešení, která zajišťuje, že stabilní výsledky budou vráceny ve všech požadavcích z dotazu. Dotaz se provádí v jedné transakci pomocí úrovně izolace snímku a sloupec zadaný v ORDER BY klauzuli zajišťuje jedinečnost sloupce.

USE AdventureWorks2025;
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'AdventureWorks2025') = 0
ALTER DATABASE AdventureWorks2025
SET ALLOW_SNAPSHOT_ISOLATION ON;

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

-- Beginning the transaction.
BEGIN TRANSACTION;

-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE @StartingRowNumber AS INT = 1,
        @RowCountPerPage AS 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
COMMIT TRANSACTION;

Použití FUNKCE ORDER BY se UNION, EXCEPT a INTERSECT

Pokud dotaz používá operátory UNION, EXCEPTnebo INTERSECT , zadejte ORDER BY klauzuli na konci příkazu. Dotaz seřadí výsledky kombinovaných dotazů. Následující příklad vrátí všechny produkty, které jsou červené nebo žluté a seřadí tento kombinovaný seznam podle sloupce ListPrice.

USE AdventureWorks2025;
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říklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

Následující příklad ukazuje řazení sady výsledků číselným EmployeeKey sloupcem ve vzestupném pořadí.

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

Následující příklad objedná výsledek nastavený číselným EmployeeKey sloupcem v sestupném pořadí.

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

V následujícím příkladu se ve sloupci nastaví LastName výsledek.

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

V následujícím příkladu jsou seřazené podle dvou sloupců. Tento dotaz nejprve seřadí podle sloupce vzestupně FirstName a potom seřadí běžné FirstName hodnoty podle sloupce sestupně LastName .

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