- 09/11/2017
- 5 minut na čtení
-
- j
- c
- M
- m
- M
-
+8
Platí pro: SQL Server (všechny podporované verze) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Paralelní datový sklad
Vyčísluje výstup sady výsledků. Přesněji, vrací pořadové číslo řádku v rámci oddílu sady výsledků, počínaje 1 pro první řádek v každém oddílu.
Poznámka
ROW_NUMBER
je dočasná hodnota vypočítaná při spuštění dotazu. Chcete-li zachovat čísla v tabulce, přečtěte si téma IDENTITY a SEKVENCE.
Konvence syntaxe jazyka Transact-SQL
Syntax
Poznámka
Chcete-li zobrazit syntaxi Transact-SQL pro SQL Server 2014 a starší, přečtěte si dokumentaci Předchozí verze.
Argumenty
PARTITION BY value_expression
Rozdělí sadu výsledků vytvořenou klauzulí FROM na oddíly, na které se použije funkce ROW_NUMBER. value_expression určuje sloupec, podle kterého je rozdělena sada výsledků. Pokud PARTITION BY
není zadán, bude funkce považovat všechny řádky sady výsledků dotazu za jednu skupinu. Další informace najdete v části OVER Clause (Transact-SQL).
order_by_clause
Klauzule ORDER BY
určuje pořadí, ve kterém jsou řádkům přiřazeny jejich jedinečné ROW_NUMBER
v rámci zadaného oddílu. Je vyžadováno. Další informace najdete v části OVER Clause (Transact-SQL).
Vrácené typy
bigint
Obecné poznámky
Neexistuje žádná záruka že řádky vrácené dotazem pomocí ROW_NUMBER()
budou při každém provedení seřazeny přesně stejně, pokud nebudou splněny následující podmínky.
-
Hodnoty sloupce s oddíly jsou jedinečné.
-
Hodnoty sloupců
ORDER BY
jsou jedinečné. -
Kombinace hodnot sloupce oddílu a
ORDER BY
sloupců jsou jedinečné.
ROW_NUMBER()
je nedeterministické. Další informace najdete v části Deterministické a nedeterministické funkce.
Příklady
A. Jednoduché příklady
Následující dotaz vrátí čtyři systémové tabulky v abecedním pořadí.
Zde je sada výsledků.
name | recovery_model_desc |
---|---|
mistr | JEDNODUCHÝ |
model | FULL |
msdb | JEDNODUCHÝ |
tempdb | JEDNODUCHÉ |
Chcete-li před každý přidat sloupec s číslem řádku řádek, přidejte sloupec s funkcí ROW_NUMBER
, v tomto případě s názvem Row#
. Klauzuli ORDER BY
musíte přesunout až do klauzule OVER
.
Zde je sada výsledků.
Řádek # | name | recovery_model_desc |
---|---|---|
1 | mistr | JEDNODUCHÝ |
2 | model | FULL |
3 | msdb | JEDNODUCHÉ |
4 | tempdb | JEDNODUCHÉ |
Přidání PARTITION BY
ve sloupci recovery_model_desc
restartuje číslování, když se změní hodnota recovery_model_desc
.
Zde je sada výsledků.
Řádek # | name | recovery_model_desc |
---|---|---|
1 | model | PLNÝ |
1 | hlavní | JEDNODUCHÝ |
2 | msdb | JEDNODUCHÉ |
3 | tempdb | JEDNODUCHÉ |
B. Vrácení čísla řádku pro prodejce
Následující příklad vypočítá číslo řádku pro prodejce v Adventure Works Cycles na základě jejich aktuálního pořadí prodejů.
Zde je sada výsledků .
C.Vrácení podmnožiny řádků
Následující příklad vypočítá čísla řádků pro všechny řádky v tabulce SalesOrderHeader
v pořadí OrderDate
a vrátí pouze řádky 50
do 60
včetně.
D. Použití ROW_NUMBER () s PARTITION
Následující příklad používá argument PARTITION BY
k rozdělení výsledku dotazu nastaveného sloupcem TerritoryName
. Klauzule ORDER BY
uvedená v klauzuli OVER
objednává řádky v každém oddílu podle sloupce SalesYTD
. Klauzule ORDER BY
v příkazu SELECT
objednává celý výsledek dotazu nastavený pomocí TerritoryName
.
Zde je sada výsledků.
Příklady: Azure Synapse Analytics a Parallel Data Warehouse
E. Vrácení čísla řádku pro prodejce
Následující příklad vrátí ROW_NUMBER
pro obchodní zástupce na základě jejich přidělené prodejní kvóty.
Zde je dílčí sada výsledků.
F. Použití ROW_NUMBER () s PARTITION
Následující příklad ukazuje použití funkce ROW_NUMBER
s argumentem PARTITION BY
. To způsobí, že funkce ROW_NUMBER
očísluje řádky v každém oddílu.
Zde je částečná sada výsledků.
Viz také
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)