ROW_NUMBER (Transact-SQL) (Polski)

  • 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.

  1. Wartości podzielonej kolumny są unikalne.

  2. Wartości kolumn ORDER BY są unikalne.

  3. 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)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *