您的位置:首页 > 数据库

SQL 2005 中 ROW_NUMBER 用法

2009-08-05 14:59 393 查看
原文地址: http://msdn.microsoft.com/en-us/library/ms186734.aspx
ROW_NUMBER (Transact-SQL)

Returns the sequential number of a row within a partition of a result set, starting at 1 for the first row in each partition.


Transact-SQL Syntax Conventions


Syntax

ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> )



Arguments

<partition_by_clause>

Divides the result set produced by the FROM clause into partitions to which the ROW_NUMBER function is applied. For the PARTITION BY syntax, see OVER Clause (Transact-SQL).

<order_by_clause>

Determines the order in which the ROW_NUMBER value is assigned to the rows in a partition. For more information, see ORDER BY Clause (Transact-SQL). An integer cannot represent a column when the <order_by_clause> is used in a ranking function.


Return Types

bigint


Remarks

The ORDER BY clause determines the sequence in which the rows are assigned their unique ROW_NUMBER within a specified partition.


Examples

A. Returning the row number for salespeople

The following example returns the
ROW_NUMBER
for the salespeople in
AdventureWorks
based on the year-to-date sales.



Copy Code

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. Returning a subset of rows

The following example returns rows with numbers
50
to
60
inclusive in the order of the
OrderDate
.



Copy Code

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. Using ROW_NUMBER() with PARTITION

The following example shows using the
ROW_NUMBER
function with the
PARTITION BY
argument.



Copy Code

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;



See Also

Reference

RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)
Ranking Functions (Transact-SQL)
Functions (Transact-SQL)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: