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 排序,子句和主句都要写,若子句中不写,主句中的排序会影响到子句。

  • 相关阅读:
    LeetCode Binary Tree Inorder Traversal
    LeetCode Populating Next Right Pointers in Each Node
    LeetCode Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode Reverse Linked List II
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Pascal's Triangle
    Palindrome Construct Binary Tree from Preorder and Inorder Traversal
    Pascal's Triangle II
    LeetCode Word Ladder
    LeetCode Binary Tree Zigzag Level Order Traversal
  • 原文地址:https://www.cnblogs.com/heluo/p/2617147.html
Copyright © 2011-2022 走看看