Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databá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 BYnení zadána klauzule.Určete pořadí, ve kterém se hodnoty funkce řazení použijí na sadu výsledků.
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ů:
-
UNIONoperátor -
EXCEPToperátor -
INTERSECToperá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
OVERnepodporujeOFFSETaFETCH.OFFSETaFETCHnelze je zadat přímo vINSERTpříkazech ,UPDATE,MERGEaDELETEpříkazy, ale lze je zadat v poddotaz definovaných v těchto příkazech. Například vINSERT INTO SELECTpříkazuOFFSETaFETCHlze jej zadat vSELECTpříkazu.V dotazu, který používá
UNIONoperátory (EXCEPTneboINTERSECToperátory)OFFSETaFETCHlze jej zadat pouze v konečném dotazu, který určuje pořadí výsledků dotazu.TOPnelze kombinovat se stejným výrazemOFFSETdotazu (FETCHve 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:
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.
Klauzule
ORDER BYobsahuje 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;