排序分页

发布时间:2017-7-1 11:43:28编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"排序分页 ",主要涉及到排序分页 方面的内容,对于排序分页 感兴趣的同学可以参考一下。

继续上一篇的行号分页,接下来讲讲排序分页。

数据库依旧是Northwind,表依旧是Orders,假设每页显示10条记录。

我们先查询第一页的记录。

SELECT TOP 10        *FROM    dbo.OrdersORDER BY OrderID ASC

第二页的记录,先升序取出前20条记录,然后在这20条记录里倒序取出前10条记录,最后把这10条记录升序一下。

SELECT  *FROM    ( SELECT TOP 10                    *          FROM      ( SELECT TOP 20                                *                      FROM      dbo.Orders                      ORDER BY  OrderID ASC                    ) T          ORDER BY  T.OrderID DESC        ) T2ORDER BY T2.OrderID ASC

第三页的记录,先升序取出前30条记录,然后在这30条记录里倒序取出前10条记录,最后把这10条记录升序一下。

SELECT  *FROM    ( SELECT TOP 10                    *          FROM      ( SELECT TOP 30                                *                      FROM      dbo.Orders                      ORDER BY  OrderID ASC                    ) T          ORDER BY  T.OrderID DESC        ) T2ORDER BY T2.OrderID ASC

由此可以推断出,第N页记录为:

SELECT  *FROM    ( SELECT TOP 10                    *          FROM      ( SELECT TOP N * 10                                *                      FROM      dbo.Orders                      ORDER BY  OrderID ASC                    ) T          ORDER BY  T.OrderID DESC        ) T2ORDER BY T2.OrderID ASC

写成通用的SQL语句如下:

BEGIN    DECLARE @PageSize INT     --每页显示条数    DECLARE @PageIndex INT    --页码(从1开始)    SET @PageSize = 10    SET @PageIndex = 1    SELECT  *    FROM    ( SELECT TOP ( @PageSize )                        *              FROM      ( SELECT TOP ( @PageIndex * @PageSize )                                    *                          FROM      dbo.Orders                          ORDER BY  OrderID ASC                        ) T              ORDER BY  T.OrderID DESC            ) T2    ORDER BY T2.OrderID ASCEND

 写成存储过程如下:

CREATE PROCEDURE P_GetPagedOrders3    @PageSize INT ,              -- 每页显示条数    @PageIndex INT ,             -- 页码(从1开始)    @RecordCount INT OUTPUT ,    -- 数据总数    @PageCount INT OUTPUT        -- 总页数AS    BEGIN    -- 获取数据总数        SELECT  @RecordCount = COUNT(1)        FROM    dbo.Orders        -- 计算总页数        SET @PageCount = ( @RecordCount + @PageSize - 1 ) / @PageSize        -- 获取当前页的数据        IF @PageIndex < @PageCount -- 不是最后一页            BEGIN                SELECT  *                FROM    ( SELECT TOP ( @PageSize )                                    *                          FROM      ( SELECT TOP ( @PageIndex * @PageSize )                                                *                                      FROM      dbo.Orders                                      ORDER BY  OrderID ASC                                    ) T                          ORDER BY  T.OrderID DESC                        ) T2                ORDER BY T2.OrderID ASC            END        ELSE -- 最后一页            BEGIN                SELECT  *                FROM    ( SELECT TOP ( @RecordCount % @PageSize )                                    *                          FROM      dbo.Orders                          ORDER BY  OrderID ASC                        ) T                ORDER BY T.OrderID ASC            END    END

注意,最后一页需要特殊处理。

测试存储过程:

DECLARE    @RecordCount int,        @PageCount intEXEC    [dbo].[P_GetPagedOrders3]        @PageSize = 10,        @PageIndex = 2,        @RecordCount = @RecordCount OUTPUT,        @PageCount = @PageCount OUTPUTSELECT    @RecordCount as N'@RecordCount',        @PageCount as N'@PageCount'

测试结果如下:


上一篇:重读《深入理解Java虚拟机》五、虚拟机如何执行字节码?程序方法如何被执行?虚拟机执行引擎的工作机制
下一篇:深入浅出讲解:php的socket通信

相关文章

关键词: 排序分页

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款