博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
特殊分页处理
阅读量:4190 次
发布时间:2019-05-26

本文共 2044 字,大约阅读时间需要 6 分钟。

原帖地址:

--测试数据

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

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=225446

你可能感兴趣的文章
软件开发经典书籍
查看>>
spinlock原理
查看>>
dup源码分析
查看>>
try_to_wakeup 选择其他核运行逻辑
查看>>
2021-03-28
查看>>
rtlinux
查看>>
OPPO Reno3系列旗舰官宣:骁龙765G+正反双曲面设计
查看>>
一加8系列新机有望亮相CES 2020:全系支持5G网络
查看>>
称对方攀附使用近似商标 “汽车之家”起诉索赔500万
查看>>
三星突然发布Galaxy S10 Lite和Note 10 Lite:有不同也有所同
查看>>
小米10/10 Pro详细规格曝光:120Hz高刷新率屏+66W超级闪充
查看>>
支付宝2019年账单周一见 你准备好了吗?
查看>>
三星年度旗舰S20要来了:潜望式长焦加一亿像素!
查看>>
2019年微信数据报告:男性用户最爱搜“小姐姐”,表情包最受欢迎的是它
查看>>
莫名其妙就发个手机!这家公司员工晒年终奖品:人手一部iPhone 11
查看>>
苹果iPhone发布13周年:累计销量近20亿部
查看>>
威马董事长沈晖隔空喊话王兴:威马一定会是Top3之一
查看>>
号称2020最轻薄的5G旗舰,这款手机 你不看看吗?
查看>>
果粉失望!iPhone 12系列依旧刘海屏,将升级Face ID元件
查看>>
马化腾出售腾讯股份,四天套现近20亿港元;朋友圈发红包测试视频红包玩法...
查看>>