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的当前页面是从零开始
  • 相关阅读:
    c# 使用ajaxfileupload上传文件,通过一般处理程序(Handler)接收文件 ashx 图片 Excel文件都可以
    C#+aspx+ajaxfileupload 实现文件上传
    Java中的int与String互相转换方式
    简述 readyonly 与 disabled 的区别
    was应用服务器搭建
    MVC中贫血模型与充血模型
    npm安装教程 Vue环境搭建
    使用vs Code从0开始搭建一个vue项目(手把手教会你,包会)
    使用VS code 打开Vue项目
    Task , Thread 学习
  • 原文地址:https://www.cnblogs.com/springsnow/p/9590661.html
Copyright © 2011-2022 走看看