Udostępnij za pośrednictwem


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.

Topic link iconKonwencje składni języka Transact-SQL

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;