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

 

 

 

你可能感兴趣的:(row_number)