1.首先介绍ROW_NUMBER() OVER的基本用法
2.看一下实例数据
初始化数据
create table employee (empid int ,deptid int ,salary decimal(10,2))
insert into employee values(1,10,5500.00)
insert into employee values(2,10,4500.00)
insert into employee values(3,20,1900.00)
insert into employee values(4,20,4800.00)
insert into employee values(5,40,6500.00)
insert into employee values(6,40,14500.00)
insert into employee values(7,40,44500.00)
insert into employee values(8,50,6500.00)
insert into employee values(9,50,7500.00)
数据结果显示
根据部门分组(deptid),显示每个部门的工资(salary)等级

这是想要得到的结果第二列根据部门进行分组,第三列工资由高到低,rank进行部门内部的排列
3.简单分页实现
SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee
根据上面1,2两点我们可以看出这个SQL只是按照工资降序排序后,并没有通过PARTITION BY COLUMN进行分区(分组),然后通过row_number()从1开始,为每一条分组记录返回一个数字。结果如下
将上面SQL返回的结果集当作一个数据表
(SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee)as NewTable
假如我们每页5条记录,
那么第一页显示select * from (SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee ) as NewTable where rank between 1 and 5
第二页为select * from (SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee ) as NewTable where rank between 6 and 10
当然我们第二页这里只有4条记录。
分页就这样实现了,对于多表查询进行分页也是同样的道理。
</div>
您可能想查找下面的文章:
- SQL2005重新生成索引的的存储过程 sp_rebuild_index 原创
- SQL2005查看死锁存储过程sp_who_lock
- 解决无法配置SQL2005问题
- sql2005 本地计算机上的SQL SERVER服务启动后又停止了解决方法
- SQL2005 provider: 命名管道提供程序 error: 40 无法打开到 SQL Server 的连接
- 安装SQL2005时出现的版本变更检查SKUUPGRADE=1问题的解决方法
- SQL2005Express中导入ACCESS数据库的两种方法
- Win2008中安装的MSSQL2005后无法访问的解决方法
- sql2005附加数据库操作步骤(sql2005还原数据库)
- sql2005数据导出方法(使用存储过程导出数据为脚本)