結果セットのパーティション内の行について、各パーティションの最初の行を 1 とした連続する数値を返します。
Transact-SQL 構文表記規則
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
- <partition_by_clause>
-
FROM 句で生成された結果セットを、ROW_NUMBER 関数が適用されるパーティションに分割します。PARTITION BY の構文については、「OVER 句 (Transact-SQL)」を参照してください。
- <order_by_clause>
-
ROW_NUMBER 値がパーティション内の行に割り当てられる順序を決定します。詳細については、「ORDER BY 句 (Transact-SQL)」を参照してください。<order_by_clause> が順位付け関数で使用される場合、整数値で列を表すことはできません。
bigint
ORDER BY 句は、指定したパーティション内の行に一意の ROW_NUMBER を割り当てる順序を決定します。
A. 販売員の行番号を返す
次の例では、AdventureWorks の販売員について、今年に入ってからの売り上げに基づく ROW_NUMBER を返します。
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. 行のサブセットを返す
次の例では、OrderDate の順に、50 から 60 までの番号を持つ行を返します。
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. ROW_NUMBER() を PARTITION と共に使用する
次の例では、ROW_NUMBER 関数を PARTITION BY 引数と共に使用します。
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;
関連項目
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)
順位付け関数 (Transact-SQL)
関数 (Transact-SQL)
ヘルプおよび情報
SQL Server 2008 の参考資料の入手