zoukankan      html  css  js  c++  java
  • 从数据表中取出2030的记录

    今天在看《程序员》杂志看到一道题目:SQL的一张表中有个自增的ID字段,但是现在不连续,写一条SQL语句取出某个位置到某个位置之间的数据。

    这题目很简单,但是当时第一个想到的是用top + not in的方式去取出数据,后来想想都是SQL2005的时代了,之间在写一些分页的时候,也用过

    数据库分页的方式,但是一时又想不起来于是查了一个msdn,原来是ROW_NUMBER ( )  ,语法如下:

    ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> )

    SQL语句:
    Select * From (Select (ROW_NUMBER() OVER(ORDER BY ID asc)) AS rownum,* From [TABLENAME]) t
    Where rownum BETWEEN 1 AND 20  

    备注
    ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

    参数
    <partition_by_clause>:将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。

    <order_by_clause>:确定将 ROW_NUMBER 值分配给分区中的行的顺序

    返回类型:bigint

    例子,假设有张tbusers表,有UserID 与UserName,我们取出第20条~30条的记录

    1)top方式

     select top 10 UserName from tbUsers where UserID not in(select top 20  UserID from tbUsers)

    2) ROW_NUMBER ()方式

    select UserID, UserName,row_num from
    (
     select *, row_number() over (order by UserID) as row_num from tbUsers
    ) t

    where row_num between 21 and 30 

  • 相关阅读:
    [转载]iOS 开发中为什么更新UI都要放在主线程中?
    GCD小结
    多线程的实现
    图片缓存、PathForResource、NSBundle
    IOS全路径和文件名方法、NSBundle
    plist文件
    iphone区别翻新机
    iPhone4S国行、港版、美版、妖机识别与选购(转)
    应用沙盒
    IOS实现新特性功能
  • 原文地址:https://www.cnblogs.com/JackWang/p/1955559.html
Copyright © 2011-2022 走看看