SQL2005利用ROW_NUMBER() OVER实现分页功能_Mssql数据库教程

编辑Tag赚U币
教程Tag:ROW_NUMBER()添加

推荐:Win7 32/64位系统下安装SQL2005和SP3补丁安装教程[图文]
今天有网友问win7 64系统下能安装sql2005吗,答案是肯定了,大家可以参考下面这篇文章试试

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

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

分享:注意:在SQL SERVER中使用NChar、NVarchar和NText
前天同事在帮客户录数据的时候,发现有一个人的名字里有个(念jie,同洁)字,但用搜狗拼音和万能五笔都打不出来,我百度了一下,找到了一篇搜狗论坛的建议帖,有人建议搜狗拼音里增加 字的输入,下面跟帖的人贴出了这个字。 既然字已经找到,我以为一切OK了,把它复制到

来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2013-04-21
相关Mssql数据库教程