zoukankan      html  css  js  c++  java
  • SQL Server(00):分页方法汇总

    根据SalesOrderID排序,取第16-18行这3条记录。

    方法一:(最常用的分页代码, top / not in)

    SELECT   TOP 3 [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
    WHERE    [SalesOrderID] NOT IN (   SELECT   TOP 15 [SalesOrderID]
                                        FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
                                        ORDER BY [SalesOrderID] )
     ORDER BY SalesOrderID;

    备注: 注意前后的order by 一致

    方法二:排名开窗函数 (row_number() over (order by ))

    SELECT  [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM    (   SELECT [SalesOrderID], [RevisionNumber], [OrderDate] ,
                       ROW_NUMBER() OVER ( ORDER BY SalesOrderID ) AS rowid
                FROM   [AdventureWorks2012].[Sales].[SalesOrderHeader] ) cte
    WHERE   rowid
    BETWEEN 16 AND 18;

    方法三:(offset /fetch next, SQL Server 2012支持,性能最好!)

    SELECT   [SalesOrderID], [RevisionNumber], [OrderDate]
     FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
     ORDER BY SalesOrderID OFFSET 15 ROW FETCH NEXT 3 ROWS ONLY;

    总结:利用变量进行分页

    DECLARE @page INT, @size INT, @Total INT;
    SELECT @page = 3, @size = 10; --当前页面为3,页面大小为10
    
    
    -------方法一
    SELECT   TOP ( @size ) [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
    WHERE    [SalesOrderID] NOT IN (   SELECT   TOP (( @page - 1 ) * @size ) [SalesOrderID]
                                       FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
                                       ORDER BY [SalesOrderID] )
    ORDER BY SalesOrderID;
    
    -------方法二
    SELECT  [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM    (   SELECT [SalesOrderID], [RevisionNumber], [OrderDate] ,
                       ROW_NUMBER() OVER ( ORDER BY SalesOrderID ) AS rowid
                FROM   [AdventureWorks2012].[Sales].[SalesOrderHeader] ) cte
    WHERE   rowid
    BETWEEN ( @page - 1 ) * @size + 1 AND @page * @size;
    
    -------方法三
    SELECT   [SalesOrderID], [RevisionNumber], [OrderDate]
    FROM     [AdventureWorks2012].[Sales].[SalesOrderHeader]
    ORDER BY SalesOrderID OFFSET ( @page - 1 ) * @size ROWS FETCH NEXT @size ROWS ONLY; ---offset的当前页面是从零开始
  • 相关阅读:
    填坑!!!virtualenv 中 nginx + uwsgi 部署 django
    树的遍历与递归
    Python 函数的参数
    virtualbox安装增强功能时【未能加载虚拟光盘】
    深入理解Python中的生成器
    Genymotion下载慢或者下载失败的解决办法
    Python3 多线程的两种实现方式
    Java 多线程
    关于"裁员与面试"的个人感悟吧
    三、由简单对象组装复杂实例的模式:建造者模式
  • 原文地址:https://www.cnblogs.com/springsnow/p/9590661.html
Copyright © 2011-2022 走看看