• 教你学会Sql中 ROW_NUMBER的用法


    ROW_NUMBER SqlServer 2005 推出的新功能。
    语法:select *,ROW_Number() over(order by 字段) as '新列名' from table
    顾名思义:ROW_NUMBER() 为根绝条件查询出来的数据添加一列(有序的一列,连续序号的1,2,3....),虽然说数据库中的表的自增列的ID也是连续的,
    但是根据筛选条件或者删除行导致ID序号出现断号,而ROW_NUMBER()这个方法恰恰可以生成一个新的一列(序号相连),最主要的应用就是SQL分页;
    1select * from Table_1

    图一  

    (2)select ROW_NUMBER() over(order by name desc) as zhong, * from Table_1

    图二   按照一个字段,生成一个新的具有排序功能的字段,本例是生成了一个有序号zhong字段,按照name的倒序排。

    (3)select ROW_NUMBER() over(order by name desc) as zhong, * from Table_1 order by zhong desc

    图三  代码的最终排序结果是按照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 排序,子句和主句都要写,若子句中不写,主句中的排序会影响到子句。

  • 相关阅读:
    python学习笔记--Django入门一 网页显示时间
    python学习笔记--easy_install和pip
    python学习笔记--Django入门0 安装dangjo
    Linux学习笔记总结--memcached配置
    python学习笔记--基础语法
    python学习笔记--导入tab键自动补全功能的配置
    Linux学习笔记总结--ssh认证登录
    ABAP 通过字段找表程序
    smod包含具体的增强(具体实施对象) / CMOD 包含一组smod编写的增强
    SE18 BADI定义 / SE19 BADI 实现
  • 原文地址:https://www.cnblogs.com/heluo/p/2617147.html
Copyright © 2020-2023  润新知