zl程序教程

您现在的位置是:首页 >  其它

当前栏目

SQL2005利用ROW_NUMBER()OVER实现分页功能

实现 利用 number 功能 分页 row Over sql2005
2023-06-13 09:14:42 时间

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条记录。

分页就这样实现了,对于多表查询进行分页也是同样的道理。