教你学会Sql中 ROW_NUMBER的用法
2012-07-31 17:26
357 查看
ROW_NUMBER SqlServer 2005 推出的新功能。 语法:select *,ROW_Number() over(order by 字段) as '新列名' from table 顾名思义:ROW_NUMBER() 为根绝条件查询出来的数据添加一列(有序的一列,连续序号的1,2,3....),虽然说数据库中的表的自增列的ID也是连续的, 但是根据筛选条件或者删除行导致ID序号出现断号,而ROW_NUMBER()这个方法恰恰可以生成一个新的一列(序号相连),最主要的应用就是SQL分页;
(1) select * from Table_1
图一
![](http://pic002.cnblogs.com/images/2012/380817/2012073115013720.jpg)
(2)select ROW_NUMBER() over(order by name desc) as zhong, * from Table_1
图二
![](http://pic002.cnblogs.com/images/2012/380817/2012073115030492.jpg)
按照一个字段,生成一个新的具有排序功能的字段,本例是生成了一个有序号zhong字段,按照name的倒序排。
(3)select ROW_NUMBER() over(order by name desc) as zhong, * from Table_1 order by zhong desc
图三
![](http://pic002.cnblogs.com/images/2012/380817/2012073115034722.jpg)
代码的最终排序结果是按照sql中的order by 而不是按照ROW_NUMBER()中 over的order by 排序的。
(4)使用ROW_NUMBER()函数可以查找指定范围内的数据,实现分页功能。
string sql = String.Format("select * from (select *,ROW_NUMBER() over(order by id) as row from Table_1 where name='{0}') t where row>={1} and row<{2} ", Name.ToString(), ((pageIndex - 1) * pageSize).ToString(), ((pageIndex) * pageSize).ToString() );
把查询出来的结果又按照序号排了一次序,然后根据索引和每页的个数,就能够查出每一次同步请求的分页的数。
(5)不使用ROWER_NUMBER()也能够实现查询指定范围的内容,使用Top来限定范围(3个select)
string sql = "select id from (select top(2)id from (select top(5) id from Table_1 order by id asc) t order by id desc) m order by id asc"
注意:sql语句子查询中的 order by 排序,子句和主句都要写,若子句中不写,主句中的排序会影响到子句。
相关文章推荐
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
- SQL技术内幕-4 row_number() over( partition by XX order by XX)的用法(区别于group by 和order by)
- SQL中distinct 和 row_number() over() 的区别及用法
- ROW_NUMBER用法(SQL 2005新功能)
- SQL中distinct 和 row_number() over() 的区别及用法
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- SQL中分析函数ROW_NUMBER() OVER(PARTITION BY GRADEOBJECTID ORDER BY BG.GRADEDATE DESC)的用法!!!
- SQL:ROW_NUMBER() 的用法
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法
- sql语句row_number() OVER用法
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- SQL ROW_NUMBER() OVER函数的基本用法用法
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- sql中函数over()和row_number()的用法
- SQL 2005 中 ROW_NUMBER 用法
- oracle,在一条sql语句里面的wmsys.wm_concat()、row_number()、union all 的用法
- SQL中distinct 和 row_number() over() 的区别及用法
- SQL技术内幕-4 row_number() over( partition by XX order by XX)的用法(区别于group by 和order by)