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ů, nejsou zaručeny, 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 Azure Synapse Analytics a paralelní datový sklad

[ 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í lze zadat jako alias názvu nebo sloupce nebo ne záporné celé číslo představující pozici sloupce v seznamu výběru.

Lze 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ů. To znamená, že 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ů odkazované 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, musí být alias sloupce použit samostatně, a ne jako součást některého výrazu v ORDER BY klauzuli, například:

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 COLLATE

Určuje, že ORDER BY operace by měla být provedena podle kolace zadané 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, než 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ž se použije 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ž se použije 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 řádků posunu zobrazí v řádcích nebo atributu Top 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ý, příkaz není tak snadno srozumitelný jinými uživateli 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 se zabránilo 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 jsou ovlivněny TOP. Další informace najdete v tématu TOP.

Interoperability

Při použití s příkazem SELECT...INTO nebo INSERT...SELECT vložení řádků z jiného zdroje ORDER BY klauzule nezaručuje, ž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ů.

Sloupce typu ntext, text, obrázek, geografie, geometrie a xml nelze použít v ORDER BY klauzuli.

Celé číslo nebo konstantu nelze zadat, když se order_by_expression zobrazí ve funkci řazení. Další informace naleznete v tématu SELECT - OVER klauzule.

Pokud je název tabulky v FROM klauzuli aliasovaný, lze k kvalifikaci sloupců v klauzuli použít pouze název aliasu ORDER BY .

Názvy sloupců a aliasy zadané v klauzuli musí být definovány v ORDER BY seznamu select, pokud SELECT příkaz obsahuje jednu z následujících klauzulí nebo operátorů:

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

Kromě toho platí, že pokud příkaz obsahuje UNIONoperátor , EXCEPTnebo INTERSECT operátor, názvy sloupců nebo aliasy sloupců musí být zadány v seznamu výběru prvního (levého) dotazu.

V dotazu, který používá UNION, EXCEPTnebo INTERSECT operátory, ORDER BY je povolen 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. Podívejte se na následující část Příklady .

Klauzule ORDER BY není platná v zobrazeních, vložených funkcích, odvozených tabulkách a poddotazech, pokud TOPOFFSET nejsou zadány ani klauzule nebo FETCH klauzule. Při ORDER BY použití 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.

  • OFFSET a FETCH nelze je zadat přímo v INSERTpříkazech , UPDATE, MERGEa DELETE příkazy, ale lze je zadat v poddotaz definovaných v těchto příkazech. Například v INSERT INTO SELECT příkazu OFFSET a FETCH lze jej zadat v SELECT příkazu.

  • V dotazu, který používá UNIONoperátory ( EXCEPT nebo INTERSECT operátory) OFFSET a FETCH lze jej zadat pouze v konečném dotazu, který určuje pořadí výsledků dotazu.

  • TOP nelze kombinovat se stejným výrazem OFFSET dotazu ( FETCH ve stejném oboru dotazu).

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

Místo klauzule byste měli použít OFFSETFETCH klauzule TOP a implementovat řešení stránkování dotazů a omezit počet řádků odeslaný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. To 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 používaná dotazem se nesmí měnit. To znamená, že buď řádky ovlivněné dotazem nejsou aktualizovány, nebo všechny požadavky na stránky z dotazu se provádějí v jedné transakci pomocí snímku nebo serializovatelné izolace transakcí. 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 "Spouštění více dotazů v jedné transakci" v části Příklady dále v tomto článku.

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 Určení výrazů pro hodnoty OFFSET a FETCH v části Příklady dále v tomto článku. 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 konkrétní pořadí řazení není zadané, použije se výchozí (vzestupné pořadí).

USE AdventureWorks2022;
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 seřadí sadu výsledků podle sloupce, který není součástí seznamu select, ale je definován v tabulce zadané v FROM klauzuli.

USE AdventureWorks2022;
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 AdventureWorks2022;
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 AdventureWorks2022;
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 AdventureWorks2022;
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 AdventureWorks2022;
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 AdventureWorks2022;
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);
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;

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

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

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 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. 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 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. 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í hodnoty FETCH. Kromě toho je zadána nápověda OPTIMIZE FORdotazu. Tento tip lze použít 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 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. 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 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. 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 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

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

Pokud dotaz používá operátory UNION, EXCEPTnebo INTERSECTORDER BY , musí být klauzule zadána na konci příkazu a výsledky kombinovaných dotazů jsou seřazeny. 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 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ří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;