- 11.09.2017
- 5 minut na przeczytanie
-
- j
- c
- M
- m
- M
-
+8
Dotyczy: SQL Server (wszystkie obsługiwane wersje) Azure SQL Database Wystąpienie zarządzane Azure SQL Azure Synapse Analytics Równoległa hurtownia danych
Numeruje dane wyjściowe zestawu wyników. Dokładniej, zwraca kolejny numer wiersza w ramach partycji zestawu wyników, zaczynając od 1 dla pierwszego wiersza w każdej partycji.
Uwaga
ROW_NUMBER
to tymczasowa wartość obliczana podczas wykonywania zapytania. Aby zachować liczby w tabeli, zobacz Właściwość IDENTITY i SEKWENCJA.
Konwencje składni języka Transact-SQL
Składnia
Uwaga
Aby wyświetlić składnię języka Transact-SQL dla SQL Server 2014 i starszych, zobacz dokumentację poprzednich wersji.
Argumenty
PARTITION BY value_expression
Dzieli zestaw wyników utworzony przez klauzulę FROM na partycje, do których jest stosowana funkcja ROW_NUMBER. value_expression określa kolumnę, według której podzielony jest zestaw wyników. Jeśli PARTITION BY
nie jest określony, funkcja traktuje wszystkie wiersze zestawu wyników zapytania jako jedną grupę. Aby uzyskać więcej informacji, zobacz Klauzula OVER (Transact-SQL).
order_by_clause
Klauzula ORDER BY
określa kolejność, w jakiej wierszom przypisuje się ich unikalne ROW_NUMBER
w ramach określonej partycji. Jest wymagane. Aby uzyskać więcej informacji, zobacz Klauzula OVER (Transact-SQL).
Typy zwracane
bigint
Uwagi ogólne
Nie ma gwarancji że wiersze zwrócone przez zapytanie korzystające z ROW_NUMBER()
zostaną uporządkowane dokładnie tak samo przy każdym wykonaniu, chyba że spełnione są następujące warunki.
-
Wartości podzielonej kolumny są unikalne.
-
Wartości kolumn
ORDER BY
są unikalne. -
Kombinacje wartości kolumny partycji i kolumny
ORDER BY
są unikalne.
ROW_NUMBER()
jest niedeterministyczna. Aby uzyskać więcej informacji, zobacz Funkcje deterministyczne i niedeterministyczne.
Przykłady
A. Proste przykłady
Poniższe zapytanie zwraca cztery tabele systemowe w porządku alfabetycznym.
Oto zestaw wyników.
name | recovery_model_desc |
---|---|
master | SIMPLE |
model | FULL |
msdb | PROSTY |
tempdb | PROSTA |
Aby dodać kolumnę z numerem wiersza przed każdym wiersz, dodaj kolumnę z funkcją ROW_NUMBER
, w tym przypadku o nazwie Row#
. Musisz przenieść klauzulę ORDER BY
do klauzuli OVER
.
Oto zestaw wyników.
Wiersz # | name | recovery_model_desc |
---|---|---|
1 | master | SIMPLE |
2 | model | FULL |
3 | msdb | PROSTE |
4 | tempdb | PROSTA |
Dodawanie w kolumnie recovery_model_desc
spowoduje ponowne uruchomienie numeracji po zmianie wartości recovery_model_desc
.
Oto zestaw wyników.
Wiersz # | name | recovery_model_desc |
---|---|---|
1 | model | FULL |
1 | master | SIMPLE |
2 | msdb | PROSTE |
3 | tempdb | PROSTA |
B. Zwracanie numeru wiersza dla sprzedawców
Poniższy przykład oblicza numer wiersza dla sprzedawców w Adventure Works Cycles na podstawie ich rankingu sprzedaży od początku roku.
Oto zestaw wyników .
C.Zwracanie podzbioru wierszy
Poniższy przykład oblicza numery wierszy dla wszystkich wierszy w tabeli SalesOrderHeader
w kolejności OrderDate
i zwraca tylko wiersze 50
do 60
włącznie.
D. Używanie ROW_NUMBER () z PARTITION
W poniższym przykładzie zastosowano argument PARTITION BY
, aby podzielić wynik zapytania ustawiony na kolumnę TerritoryName
. Klauzula ORDER BY
określona w klauzuli OVER
porządkuje wiersze w każdej partycji według kolumny SalesYTD
. Klauzula ORDER BY
w instrukcji SELECT
porządkuje cały wynik zapytania ustawiony przez TerritoryName
.
Oto zestaw wyników.
Przykłady: Azure Synapse Analytics i Parallel Data Warehouse
E. Zwracanie numeru wiersza dla sprzedawców
Poniższy przykład zwraca ROW_NUMBER
dla przedstawicieli handlowych na podstawie przydzielonych im kwot sprzedaży.
Oto częściowy zestaw wyników.
F. Używanie funkcji ROW_NUMBER () z PARTYCJĄ
Poniższy przykład ilustruje użycie funkcji ROW_NUMBER
z argumentem PARTITION BY
. Powoduje to, że funkcja ROW_NUMBER
numeruje wiersze w każdej partycji.
Oto częściowy zestaw wyników.
Zobacz też
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)