ROW_NUMBER (Transact-SQL)
Zwraca numer sekwencyjny wiersza w partycji z zestaw wyników, począwszy od 1 dla pierwszego wiersza w poszczególnych partycji.
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Argumenty
<partition_by_clause>
Dzieli zestaw wyników, wyprodukowane przez Z klauzula na partycje, do której zastosowana jest funkcja ROW_NUMBER.Aby zapoznać się ze składnią PARTITION BY zobacz W klauzula (języka Transact-SQL).<order_by_clause>
Określa kolejność, w którym wartość ROW_NUMBER jest przypisywana do wierszy w partycji.Aby uzyskać więcej informacji zobaczORDER BY Clause (Transact-SQL).Liczba całkowita nie może reprezentować kolumna po <order_by_clause> używany w funkcja klasyfikacji.
Zwracane typy
bigint
Remarks
Klauzula ORDER BY określa kolejność, w którym wiersze są przypisywane ich ROW_NUMBER unikatowy w obrębie określonej partycji.
Przykłady
A.Zwraca liczbę wierszy dla sprzedawców
W poniższym przykładzie są zwracane ROW_NUMBER dla sprzedawców w AdventureWorks opiera się na sprzedaży od początku roku.
SELECT FirstName, LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', SalesYTD, PostalCode
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;
B.Zwracanie podzbiór wierszy
W poniższym przykładzie są zwracane wierszy za pomocą liczb 50 Aby 60 włącznie w kolejności od OrderDate.
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
C.Przy użyciu ROW_NUMBER() z PARTITION
W poniższym przykładzie pokazano, za pomocą ROW_NUMBER działać z PARTITION BY argument.
SELECT FirstName, LastName, ROW_NUMBER() OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Row Number', SalesYTD, PostalCode
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;