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的当前页面是从零开始
  • 相关阅读:
    存储过程语法二
    存储过程语法一
    存储过程的优点
    .NET中Redis安装部署及使用方法简介
    UEditor富文本web编辑器
    未找到与约束contractname Microsoft.VisualStudio.Utilities.IContentTypeRegistryService
    comet 推送消息到客户端
    文本框 只能输入数字和小数点验证
    asp.net Cache
    Windows10放开Administrator权限
  • 原文地址:https://www.cnblogs.com/springsnow/p/9590661.html
Copyright © 2011-2022 走看看