zoukankan      html  css  js  c++  java
  • 根据分类表实现的分页存储过程.sql

    --要分页的原始数据
    CREATE TABLE tb(
    ID    int PRIMARY KEY,  --记录编号
    grade  varchar(10),     --类别名称
    uptime datetime)        --更新时间
    INSERT tb SELECT 1 ,'a','2004-12-11'
    UNION ALL SELECT 2 ,'b','2004-12-11'
    UNION ALL SELECT 3 ,'c','2004-12-11'
    UNION ALL SELECT 4 ,'a','2004-12-12'
    UNION ALL SELECT 5 ,'c','2004-12-13'
    UNION ALL SELECT 6 ,'c','2004-12-13'
    UNION ALL SELECT 7 ,'a','2004-12-14'
    UNION ALL SELECT 8 ,'a','2004-12-15'
    UNION ALL SELECT 9 ,'b','2004-12-16'
    UNION ALL SELECT 10,'b','2004-12-17'
    UNION ALL SELECT 11,'a','2004-12-17'

    --分页定义表
    CREATE TABLE tb_Page(
    grade   varchar(10) PRIMARY KEY, --类别名称,与tb表的grade关联
    Records int,                     --每页显示的记录数
    Orders  int)                     --在页中的显示顺序
    INSERT tb_Page SELECT 'c',2,1
    UNION  ALL     SELECT 'b',1,2
    UNION  ALL     SELECT 'a',2,3
    GO

    --实现分页处理的存储过程
    CREATE PROC p_PageView
    @PageCurrent int=1  --要显示的当前页码
    AS
    SET NOCOUNT ON
    --得到每页的记录数
    DECLARE @PageSize int
    SELECT @PageSize=SUM(Records) FROM tb_Page
    IF ISNULL(@PageSize,0)<0 RETURN

    --分页显示处理
    SET @PageCurrent=@PageCurrent*@PageSize
    SET ROWCOUNT @PageCurrent
    SELECT SID=IDENTITY(int,1,1),ID
    INTO # FROM(
        SELECT TOP 100 PERCENT a.ID
        FROM tb a
            LEFT JOIN tb_Page b ON a.grade=b.grade
        ORDER BY CASE WHEN b.grade IS NULL THEN 1 ELSE 0 END,--分类没有定义的显示在最后
            ((SELECT COUNT(*) FROM tb
                WHERE grade=a.grade
                    AND (uptime>a.uptime OR uptime=a.uptime AND id>=a.id))-1)
            /b.Records,
            b.Orders,a.ID DESC)a
    IF @PageCurrent>@PageSize
    BEGIN
        SET @PageCurrent=@PageCurrent-@PageSize
        SET ROWCOUNT @PageCurrent
        DELETE FROM #
    END
    SELECT a.* FROM tb a,# b
    WHERE a.ID=b.ID
    ORDER BY b.SID
    GO

    --调用
    EXEC p_PageView 2
    /*--结果
    ID          grade      uptime                                                 
    ----------- ---------- ------------------------------------------------------
    3           c          2004-12-11 00:00:00.000
    9           b          2004-12-16 00:00:00.000
    7           a          2004-12-14 00:00:00.000
    4           a          2004-12-12 00:00:00.000
    2           b          2004-12-11 00:00:00.000
    --*/
  • 相关阅读:
    HDU 4714:Tree2cycle 树形DP
    HDU 4679:Terrorist’s destroy 树形DP
    as 和is的区别
    关于父类引用指向子类对象
    C# new的用法
    Mvc中把list从View传入Controller
    Html.TextBoxFor三元判断
    ref 和out的用法以及区别
    c# datatable list 相互转换
    jquery trigger伪造a标签的click事件取代window.open方法
  • 原文地址:https://www.cnblogs.com/shihao/p/2508664.html
Copyright © 2011-2022 走看看