• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

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

    发布者: 404号房间 | 发布时间: 2025-6-18 14:24| 查看数: 127| 评论数: 0|帖子模式

    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条记录。
    分页就这样实现了,对于多表查询进行分页也是同样的道理。


    来源:https://www.jb51.net/article/32411.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表