SQL2005利用ROW_NUMBER()OVER实现分页功能
1.首先介绍ROW_NUMBER()OVER的基本用法
2.看一下实例数据
初始化数据
createtableemployee(empidint,deptidint,salarydecimal(10,2))
insertintoemployeevalues(1,10,5500.00)
insertintoemployeevalues(2,10,4500.00)
insertintoemployeevalues(3,20,1900.00)
insertintoemployeevalues(4,20,4800.00)
insertintoemployeevalues(5,40,6500.00)
insertintoemployeevalues(6,40,14500.00)
insertintoemployeevalues(7,40,44500.00)
insertintoemployeevalues(8,50,6500.00)
insertintoemployeevalues(9,50,7500.00)
数据结果显示
根据部门分组(deptid),显示每个部门的工资(salary)等级
这是想要得到的结果第二列根据部门进行分组,第三列工资由高到低,rank进行部门内部的排列
3.简单分页实现
SELECT Row_Number()OVER(ORDERBYsalarydesc)rank,*FROMemployee
根据上面1,2两点我们可以看出这个SQL只是按照工资降序排序后,并没有通过PARTITIONBYCOLUMN进行分区(分组),然后通过row_number()从1开始,为每一条分组记录返回一个数字。结果如下
将上面SQL返回的结果集当作一个数据表
(SELECT Row_Number()OVER(ORDERBYsalarydesc)rank,*FROMemployee)asNewTable
假如我们每页5条记录,
那么第一页显示select*from(SELECT Row_Number()OVER(ORDERBYsalarydesc)rank,*FROMemployee)asNewTablewhererankbetween1and5
第二页为select*from(SELECT Row_Number()OVER(ORDERBYsalarydesc)rank,*FROMemployee)asNewTablewhererankbetween6and10
当然我们第二页这里只有4条记录。
分页就这样实现了,对于多表查询进行分页也是同样的道理。
相关文章
- 谈谈Java Agent技术的实现
- 利用Python实现视频号自动赚钱一条龙
- 【Unity逆向】玩游戏遇到的“飞天锁血”是怎么实现的?
- CSS实现省略号
- iOS实现上传图片到服务器详解手机开发
- Java实现倒计时代码详解编程语言
- springMVC实现防止重复提交详解编程语言
- 实现实现Linux内核 NAND驱动程序(linuxnand驱动)
- MongoDBC语言驱动:实现跨平台数据库连接(mongodbc驱动)
- Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型详解编程语言
- Oracle 视图:合理利用注释实现管理(oracle视图注释)
- 利用Oracle实现表的分区功能(oracle已有表分区)
- 和使用搭建Redis集群,利用Redis实现功能(redis的搭建)
- _concatOracle中使用WM_CONCAT聚合函数实现多值字段拼接(oraclewm)
- 值利用SQL Server实现日期操作(sqlserver日期取)
- MSSQL中如何利用表删除行命令实现快速数据清理(mssql表删除行命令)
- Linux物联网网关:实现物联网梦想的关键(linux物联网网关)
- Oracle数据库全表插入技术实现(oracle 全表插入)
- 利用Oracle主备模式实现可靠的数据保护(oracle主备模式)
- 利用Redis哨兵模式实现高可用性(redis高可用哨兵模式)
- 利用Redis队列实现遍历操作(redis队列遍历)
- 利用Redis实现数据递归存储(redis递归)
- 利用Redis实现零点失效即时失效(redis 设置0点失效)
- Redis实现自增设置初始值的简便方法(redis自增设置初始值)
- Redis实现自动应用切换的精彩瞬间(redis自动切换应用)
- 利用static实现表格的颜色隔行显示
- asp.net下利用js实现返回上一页的实现方法小集
- linuxc程序中获取shell脚本输出的实现方法