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的当前页面是从零开始
  • 相关阅读:
    创建线程方法
    List 接口
    implements 的用法
    import和export 的使用方法
    js 实现 a == 'juejin' && a == 666 && a == 888
    position的属性运用
    css calc()函数 长度运算
    .net5一分钟入门
    css 如何让大小不同的图片表现一致,同时自适应呢?
    sqlserver isnull(),Count(),sum(),month(getdate()) 的用法
  • 原文地址:https://www.cnblogs.com/springsnow/p/9590661.html
Copyright © 2011-2022 走看看