使用Sql Server2005中新添加的row_number()和rank()返回行号或排名
来源:互联网 发布:网络谈棉花是什么意思 编辑:程序博客网 时间:2024/06/06 02:10
语法:
RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > ) row_number ( )
OVER ( [ < partition_by_clause > ] < order_by_clause >
参数:
< partition_by_clause > 将 FROM 子句生成的结果集划分为要应用 RANK 函数的分区。
< order_by_clause >确定将 RANK 值应用于分区中的行时所基于的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。
例子:
cate_id , news_id , rank() over(order by cate_id desc) as row_num
FROM news
-------- ----------- ------------
24 11482 1
24 11502 2
23 11503 3
23 11486 4
23 11487 5
22 11492 6
22 11493 7
22 11494 8
21 11495 9
21 11496 10
cate_id , news_id , rank() over(order by cate_id desc) as row_num
FROM news
-------- ----------- ------------
24 11482 1
24 11502 1
23 11503 3 前面两行所以为3
23 11486 3 orderby在cate_id上,cate_id=23的行号都为3
23 11487 3
22 11492 6
22 11493 6
22 11494 6
21 11495 9 前面9行 所以为9
21 11496 9
row_number和rank的主要区别是rank返回的是唯一的行号,而rank返回的不一定是唯一值,它更具在orderby列上具有相同的值会返回一样的行号,某行的行号是相关行之前的行数加1。
set rowcount n
使 SQL Server 在返回指定的行数之后停止处理查询。(限制返回的行数)
注意:在 SQL Server 的下一个版本中,使用 SET ROWCOUNT 将不会影响 DELETE、INSERT 和 UPDATE 语句。在新的开发工作中,避免将 SET ROWCOUNT 语句与 DELETE、INSERT 和 UPDATE 语句一起使用,并计划修改当前使用该语句的应用程序。另外,对于当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句,建议您使用 TOP 语法重写它们。有关详细信息,请参阅 DELETE (Transact-SQL)、INSERT (Transact-SQL) 或 UPDATE (Transact-SQL)。
SELECT
cate_id , news_id , rank() over(order by cate_id desc) as row_num
FROM news
-------- ----------- ------------
24 11482 1
24 11502 2
23 11503 3
23 11486 4
23 11487 5
要将此选项设置为 off 以便返回所有的行,请将 SET ROWCOUNT 指定为 0。
TOP 和 SET ROWCOUNT
限制结果集大小的另一种方法是在执行一个语句之前执行 SET ROWCOUNT n 语句。SET ROWCOUNT 与 TOP 的不同之处体现在下列方面:
SET ROWCOUNT 限制适用于计算 ORDER BY 后在结果集中生成行。如果指定了 ORDER BY,SELECT 语句将在从根据指定的 ORDER BY 分类进行排序的某个值集中选择 n 行后结束。
TOP 子句适用于指定了该子句的单个 SELECT 语句。SET ROWCOUNT 将一直有效,直到执行另一个 SET ROWCOUNT 语句,例如 SET ROWCOUNT 0 将关闭该选项。
重要事项:
使用 SET ROWCOUNT 不会影响 SQL Server 下一版本中的 DELETE、INSERT 和 UPDATE 语句。应避免在新的开发工作中将 SET ROWCOUNT 与 DELETE、INSERT 和 UPDATE 语句一起使用,并计划修改当前使用它的应用程序。建议重写当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句以使用 TOP。
尽管 SET ROWCOUNT 对于 SELECT 语句的影响仍未改变,但将 TOP 与 SELECT 一起使用要优于使用 SET ROWCOUNT,原因如下:
当 SELECT、INSERT、UPDATE 和 DELETE 语句影响指定的行数时,SET ROWCOUNT 将导致这些语句中的大多数停止处理。此行为也适用于内部触发器的激发。
作为 SELECT 语句的一部分,查询优化器可以使用 TOP 子句中 expression 的值作为生成查询的执行计划的一部分。由于 SET ROWCOUNT 在执行查询的语句外使用,因此它的值不能用于生成查询的查询计划。
- 使用Sql Server2005中新添加的row_number()和rank()返回行号或排名
- SQL Server2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较
- Sql Server2005 4个排名函数: RANK(),DENSE_RANK(),ROW_NUMBER(),NTILE()
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较 转自http://www.cnblogs.com/nokiaguy/ar
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较 转自http://www.cnblogs.com/nokiaguy/ar
- sql server2005 Row_Number()的使用
- 排名或顺序的函数 ROW_NUMBER/RANK/DENSE_RANK/NTILE
- sql server 排名函数 row_number,rank,dense_rank和ntile
- SQL Server中Row_number(),Rank()和dense_rank()的用法
- SQL Server中Row_number() 和 Rank() 的用法
- SQL Server 2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
- 0021 Ms SQL 2005 四个排名函数(row_number、rank、dense_rank 和 ntile)的比较
- SQL SERver2005中row_number() 的用法
- sql 排名函数 rank() , row_number() , dense_rank() over
- struts-config.xml(转)
- One编程组暑假项目题
- 忽然1周
- oracle学习笔记(表的创建和修改)
- 获取指定行号(范围)的行的数据
- 使用Sql Server2005中新添加的row_number()和rank()返回行号或排名
- pku题目分类
- SQL Top注意事项
- 大数的加减乘除
- Nebula3学习笔记(8): 脚本系统
- WinCE电源管理的简单介绍
- 需求分析方法论
- test
- ICE 的回调