WEB开发网
开发学院数据库MSSQL Server T-SQL Enhancement in SQL Server 2005 - Part II... 阅读

T-SQL Enhancement in SQL Server 2005 - Part II

 2008-12-06 10:15:51 来源:WEB开发网   
核心提示: 下面是查询结果:我们发现最终的结果按照CutomerID进行排序,RowNum从1开始以此递增,T-SQL Enhancement in SQL Server 2005 - Part II(3),每条记录(不管是否具有相同的CustomerID)拥有不同的RowNum,提到排序,可以使用第

下面是查询结果:

T-SQL Enhancement in SQL Server 2005 - Part II

我们发现最终的结果按照CutomerID进行排序,RowNum从1开始以此递增,每条记录(不管是否具有相同的CustomerID)拥有不同的RowNum。

提到排序,我们就不得不提到Order BY,如果我们在后面加上ORDER BY,并指定不同的排序字段,会出现怎样的结果呢?

SELECT SalesOrderID,CustomerID,ROW_NUMBER() OVER (ORDER BY CustomerID) AS RowNum
FROM Sales.SalesOrderHeader
ORDER BY SalesOrderID

查询获得的结果是:

T-SQL Enhancement in SQL Server 2005 - Part II

从上图中可以看到,最终的结果以ORDER BY中指定的SalesOrderID进行排序,但是ROW_NUMBER()体现的值却是基于CustmerID排序的。

由于ROW_NUMBER()体现是基于某个确定的字段进行排序后某个DataRow所处的位置,所以它不能直接使用到Aggregate的Column中。比如下面的SQL是不合法的:

OrderCount,可以使用第一部分介绍的CTE:

WITH CTE_Order(CustomerID,OrderCount)
AS
(
SELECT CustomerID,COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
)
  
SELECT CustomerID,OrderCount,ROW_NUMBER() OVER (ORDER BY OrderCount)
FROM CTE_Order

2.     RANK()

RANK()的使用和ROW_NUMBER()类似。不过它与ROW_NUMBER()所不同的是:对于被指定为排序的字段,具有相同值得Row对应的返回值相同。比如:

上一页  1 2 3 4  下一页

Tags:SQL Enhancement in

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接