特殊分页处理

原创 2004年12月22日 14:05:00

原帖地址:
http://community.csdn.net/Expert/topic/3662/3662135.xml?temp=.4289972

--测试数据
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'
go

/*--分页处理要求

每页5条记录: c类2条 b类1条 a类2条
数据顺序,uptime desc,grade=c>b>a,id desc
某类不足时,由它的后续类补齐
--*/

--分页处理的存储过程
create proc p_split
@currentpage int=1,  --要显示的当前页
@pagesize int=5      --每页的大小(如果调整了这个,则存储过程中,排序的处理也要做相应的修改,即:case grade when 'c' then 2 when 'b' then 1 when 'a' then 2 end 部分,这个控制每类/每页多少条记录as
set nocount on
set @currentpage=@currentpage*@pagesize
set rowcount @currentpage
select * into #t from tb a
order by ((select count(*) from tb where grade=a.grade and(uptime>a.uptime or uptime=a.uptime and id>=a.id))-1)
  /case grade when 'c' then 2 when 'b' then 1 when 'a' then 2 end
 ,case grade when 'c' then 1 when 'b' then 2 when 'a' then 3 end,id desc
if @currentpage>@pagesize
begin
 set @currentpage=@currentpage-@pagesize
 set rowcount @currentpage
 delete from #t
end
select * from #t
order by case grade when 'c' then 1 when 'b' then 2 when 'a' then 3 end
 ,uptime desc,id desc
go

--调用
exec p_split 1
exec p_split 2
exec p_split 3
go

--删除测试
drop table tb
drop proc p_split

/*--测试结果

ID          grade      uptime 
----------- ---------- -------------------------
6           c          2004-12-13 00:00:00.000
5           c          2004-12-13 00:00:00.000
10          b          2004-12-17 00:00:00.000
11          a          2004-12-17 00:00:00.000
8           a          2004-12-15 00:00:00.000


ID          grade      uptime 
----------- ---------- -------------------------
3           c          2004-12-11 00:00:00.000
9           b          2004-12-16 00:00:00.000
2           b          2004-12-11 00:00:00.000
7           a          2004-12-14 00:00:00.000
4           a          2004-12-12 00:00:00.000


ID          grade      uptime 
----------- ---------- -------------------------
1           a          2004-12-11 00:00:00.000
--*/

相关文章推荐

iOS关于启动页自定义特殊处理

平常开发中对于启动页可能会有一些特别的要求,比如在启动页加动画或加一些按键可以响应事件等,最近项目中要在启动页增加版本号,因为版本号是不断的改变,所以要动态实现把它加到启动页上;在XCode上面配置的...
  • iOSbird
  • iOSbird
  • 2016年02月18日 09:45
  • 323

3、BaseDAO和分页处理

  • 2014年05月02日 18:26
  • 430KB
  • 下载

分页处理类

  • 2015年09月07日 15:01
  • 8KB
  • 下载

采用Kettle分页处理大数据量抽取任务

需求: 将Oracle数据库中某张表历史数据导入MySQL的一张表里面。 源表(Oracle):table1 目标表(MySQL):table2 数据量:20,000,000 ...

SSH集成查询分页处理BaseDao

  • 2014年11月25日 10:38
  • 3KB
  • 下载

jsp资料基础知识分页和乱码处理

  • 2013年11月25日 21:18
  • 10.95MB
  • 下载

datatables 带查询条件java服务端分页处理

使用datatables自带后台查询 前台代码:

网页论坛分页处理

  • 2012年12月24日 11:50
  • 4KB
  • 下载

基于Spring JdbcTemplate 的分页处理

1.JdbcPaginationHelper.java import java.sql.ResultSet; import java.sql.SQLException; import java.ut...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:特殊分页处理
举报原因:
原因补充:

(最多只允许输入30个字)