返回結果集分區內行的序號,每個分區的第一行從 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.vSalesPersonWHERE TerritoryName IS NOT NULL AND SalesYTD <> 0; |
B. 返回行的子集
以下樣本將返回行號為 50
到 60
的行(包含這兩行),並按 OrderDate
進行排序。
|
複製代碼 |
USE AdventureWorks;GOWITH 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.vSalesPersonWHERE TerritoryName IS NOT NULL AND SalesYTD <> 0; |
更新學習:
http://topic.csdn.net/u/20111227/21/a978539d-6d3b-4751-9588-193f9fe6fe80.html?1801