zoukankan      html  css  js  c++  java
  • 教你学会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 排序,子句和主句都要写,若子句中不写,主句中的排序会影响到子句。

  • 相关阅读:
    http请求头和响应头详细解释
    http协议POST请求头content-type主要的四种取值
    什么是精准测试
    测试管理(管事篇)
    有赞全链路压测方案设计与实施详解
    饿了么全链路压测平台的实现与原理
    京东全链路压测军演系统(ForceBot)架构解密
    java Apache common-io 讲解
    CentOS 7.0 安装go 1.3.1
    异常
  • 原文地址:https://www.cnblogs.com/heluo/p/2617147.html
Copyright © 2011-2022 走看看