row_number函数的使用

上个星期六,田老师在讲ASP.NET 数据控件自定义分页的时候,给我们介绍了SQL中一个功能很强大的函数row_number。现在就在复习一下这个函数的使用方法。

row_number函数的语法:row_number() over( [ <partition_by_clause> ] <order_by_clause> )

两个参数具体的含义为:

<partition_by_clause>

FROM 子句生成的结果集划入应用了row_number函数的分区

由于一般中小型数据库的数据放在一个磁盘分区下面,故一般这个参数我们可以不设置

<order_by_clause>

确定将 ROW_NUMBER 值分配给分区中的行的顺序

整个函数的作用是返回结果集分区内行的序列号,每个分区的第一行从 1 开始。简单来说就是为分区里面的每一条记录从1开始编号。

在数据库中我们可以很方便地利用它来进行查询

以下示例将根据年初至今的销售额,返回 AdventureWorks 中销售人员的 ROW_NUMBER

USE AdventureWorks
GO
SELECT c.FirstName, c.LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s JOIN Person.Contact c on s.SalesPersonID = c.ContactID
JOIN Person.Address a ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0

 

下示例将返回行号为 5060(含)的行,并以 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

 

 

 

posted @ 2009-10-28 17:12  美梦成真  阅读(555)  评论(0编辑  收藏  举报