特殊分页处理

原创 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
--*/

特殊分页处理

原帖地址:http://community.csdn.net/Expert/topic/3662/3662135.xml?temp=.4289972--测试数据create table tb(ID i...
  • zhaowei001
  • zhaowei001
  • 2008年01月03日 15:08
  • 139

网站特殊字体处理

在网站开发过程中,经常会遇到一些特殊字体,这些特殊字体在客户端未安装该字体时会无法正常显示,一般情况下,如果一个网站使用的特殊字体较少,而且都是静态的话,可以直接切为图片,当网站中用到的特殊字体较多,...
  • xiaolongtotop
  • xiaolongtotop
  • 2013年01月08日 22:25
  • 2316

特殊分页语句的改写优化

今天在AWR报告中看到一条TOPSQL 执行时间有点长.SQL和执行计划如下: SELECT ROWNUM R, EE.* FROM (SELECT E.* FROM (SE...
  • Skybig1988
  • Skybig1988
  • 2015年06月28日 11:08
  • 488

Java对特殊日期格式进行处理

在我们日常工作中,常常会遇到不是标准的日期类型,通常进行转化过程中,有时候会让部分人觉得头疼,这类问题可能有些人问的比较多 通常我们最喜欢的格式是 yyyy-MM-dd HH:mm:ss标准格式,这...
  • u014655105
  • u014655105
  • 2015年03月31日 17:47
  • 792

Java中特殊字符处理(转义字符)

Java中有些正则的特殊字符,如果我们需要使用这些特殊字符就需要采用"\"进行转义处理后使用。...
  • luzhenyuxfcy
  • luzhenyuxfcy
  • 2015年10月20日 19:01
  • 2090

Jsp页面简单分页处理

共${page.countrow }条记录 共${page.countpage }页 首页 上一页 5}"> ...
  • Before_Morning
  • Before_Morning
  • 2015年04月08日 21:25
  • 1137

Gson字段特殊处理

public class GsonHelper { public static Gson buildGson() { return new GsonBuilder() ...
  • wangzhen19900908
  • wangzhen19900908
  • 2017年06月29日 14:28
  • 331

mysql的sql语句特殊处理语句集合

1.更新整张表,如果某一行数据的某一列的值为空,那么让他和另一列字段的值相等 UPDATE ot_tgbz set update_day=if(update_day is null,date,upda...
  • u014796999
  • u014796999
  • 2017年03月13日 16:42
  • 304

数据的分页处理

当页面中要显示的内容过多需要分多页显示、或是数据量过大内存吃不消时,需要分页处理。 原理:每次从数据库中取出一定量的数据,通过jsp页面显示 实现: ①写一个类封装分页的页面 ②从数据库中取出...
  • u013805360
  • u013805360
  • 2015年08月29日 12:19
  • 1119

Oracle特殊字段处理--工作备忘2016/03/09

1、处理long类型字段的函数: to_lob(field)  referenec: http://blog.itpub.net/4227/viewspace-69066/ TO_LOB函...
  • richieruan
  • richieruan
  • 2016年03月09日 17:54
  • 543
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:特殊分页处理
举报原因:
原因补充:

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