问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle row_number() over()解析函数高效实现分页

发布网友 发布时间:2022-04-28 15:38

我来回答

2个回答

懂视网 时间:2022-05-01 00:42

1:首先是

    select ROW_NUMBER() over(order by id asc) as ‘rowNumber‘, * from table1

   生成带序号的集合

2:再查询该集合的 第 1  到第 5条数据

    select * from 
    (select ROW_NUMBER() over(order by id asc) as ‘rowNumber‘, * from table1) as temp
    where rowNumber between 1 and 5

完整的Sql语句

declare @pagesize int; declare @pageindex int; set @pagesize = 3

set @pageindex = 1; --第一页

select * from (select ROW_NUMBER() over(order by id asc) as ‘rowNumber‘, * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)

set @pageindex = 2; --第二页

select * from (select ROW_NUMBER() over(order by id asc) as ‘rowNumber‘, * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)

set @pageindex = 3; --第三页

select * from (select ROW_NUMBER() over(order by id asc) as ‘rowNumber‘, * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)

set @pageindex = 4;--第四页

select * from (select ROW_NUMBER() over(order by id asc) as ‘rowNumber‘, * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)

 

下面我们来写个存储过程分页

------------------------------

 

Alter Procedure PagePager   

@TableName varchar(80),   

@File varchar(1000),---   

@Where varchar(500),---带and连接   

@OrderFile varchar(100), -- 排序字段   

@OrderType varchar(10),--asc:顺序,desc:倒序   

@PageSize varchar(10), --   

@PageIndex varchar(10) --  

as      

if(ISNULL(@OrderFile, ‘‘) = ‘‘)   

begin     

set @OrderFile = ‘ID‘;   

end   

if(ISNULL(@OrderType,‘‘) = ‘‘)   

begin     

set @OrderType = ‘asc‘   

end   

if(ISNULL(@File,‘‘) = ‘‘)   

begin     

set @File = ‘*‘   

end      

declare @select varchar(8000)   

set @select = ‘    select ‘ + @File + ‘ from     (       select *,ROW_NUMBER() over(order by ‘ + @OrderFile + ‘  ‘+ @OrderType + ‘) as ‘‘rowNumber‘‘    from ‘ + @TableName + ‘    where 1=1 ‘ + @Where + ‘     )  temp where  rowNumber between (((‘ + @PageIndex + ‘ - 1) * ‘ + @PageSize + ‘)+1) and (‘ + @PageIndex + ‘*‘+ @PageSize+‘)‘   

exec(@select)

用oracle中的Row_Number实现分页

标签:

热心网友 时间:2022-04-30 21:50

复制代码
代码如下:
create
table
T_NEWS
(
ID
NUMBER,
N_TYPE
VARCHAR2(20),
N_TITLE
VARCHAR2(30),
N_COUNT
NUMBER
)
prompt
Disabling
triggers
for
T_NEWS...
alter
table
T_NEWS
disable
all
triggers;
prompt
Loading
T_NEWS...
insert
into
T_NEWS
(ID,
N_TYPE,
N_TITLE,
N_COUNT)
values
(1,
'IT',
'爱it1',
100);
insert
into
T_NEWS
(ID,
N_TYPE,
N_TITLE,
N_COUNT)
values
(2,
'体育',
'爱体育1',
10);
insert
into
T_NEWS
(ID,
N_TYPE,
N_TITLE,
N_COUNT)
values
(3,
'体育',
'爱体育2',
30);
insert
into
T_NEWS
(ID,
N_TYPE,
N_TITLE,
N_COUNT)
values
(4,
'IT',
'爱it2',
300);
insert
into
T_NEWS
(ID,
N_TYPE,
N_TITLE,
N_COUNT)
values
(5,
'IT',
'爱it3',
200);
insert
into
T_NEWS
(ID,
N_TYPE,
N_TITLE,
N_COUNT)
values
(6,
'体育',
'爱体育3',
20);
insert
into
T_NEWS
(ID,
N_TYPE,
N_TITLE,
N_COUNT)
values
(7,
'体育',
'爱体育4',
60);
commit;
第一步:我先用rownum
--分页
row_number,不是rownum
--根据n_count从大到小排列,每页3条
SELECT
ROWNUM
r,t.*
FROM
t_news
t
WHERE
ROWNUM<=3
ORDER
BY
t.n_count
DESC
--问题:为什么order
by以后,行号是乱的?
SELECT
ROWNUM
r,t.*
FROM
t_news
t
--原因:先分配了行号,再根据n_count排序
--所以必须排序,再生成行号
SELECT
ROWNUM
r,t.*
FROM
(
SELECT
t.*
FROM
t_news
t
ORDER
BY
t.n_count
DESC
)
t
--分页
--err
SELECT
ROWNUM
r,t.*
FROM
(
SELECT
t.*
FROM
t_news
t
ORDER
BY
t.n_count
DESC
)
t
WHERE
r
between
1
AND
3
--第1页
SELECT
ROWNUM
r,t.*
FROM
(
SELECT
t.*
FROM
t_news
t
ORDER
BY
t.n_count
DESC
)
t
WHERE
ROWNUM
between
1
AND
3
--第2页
SELECT
ROWNUM
r,t.*
FROM
(
SELECT
t.*
FROM
t_news
t
ORDER
BY
t.n_count
DESC
)
t
WHERE
ROWNUM
between
4
AND
6
--error:
ROWNUM必须从1开始!
SELECT
k.*
FROM
(
SELECT
ROWNUM
r,t.*
FROM
(
SELECT
t.*
FROM
t_news
t
ORDER
BY
t.n_count
DESC
)
t
)
k
WHERE
r
BETWEEN
4
AND
6
--麻烦,效率低!
*****第二步:我用row_number()
over()函数
select
t2.*
from
(select
t.*,row_number()over(order
by
t.n_count
desc)
orderNumber
from
t_news
t
order
by
t.n_count
desc)t2
where
orderNumber
between
1and
3;
*****************************************************************************************************************************************88
SELECT
*
FROM
(
SELECT
t.*,row_number()
over(ORDER
BY
n_count
DESC)
r
FROM
t_news
t
ORDER
BY
t.n_count
DESC
)
t
WHERE
r
BETWEEN
4
AND
6
--通用语法:
解析函数()
over(partition
by
字段
order
by
字段)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
和面的和是什么读音? win10 应用打不开。全都打不开。 进入win10打不开软件 win10电脑软件都打不开是什么原因win10突然软件都打不开软件是怎么回事... 软件打不开怎么办win10电脑点不开软件最简单办法 请问下,离厦门市岛内的台湾路的国联大厦最近的建设银行和农业银行... 从巴黎都市到建设银行怎么坐公交车,最快需要多久 东莞万江官桥窖离建设银行哪路车最近? 建行七支分行有那些公交车经过 佛山哪里有飞越丛林拓展 oracle 分析函数rank()over()使用,与group by的区别 SQL lag() over()函数用法什么用? ORACLE的CASE函数和RANK函数套用,这是查询代码中的一部分,代码没问题... oracle7中如何分组排序(就像使用rank函数的功能一样的结果) 梦到家中被水淹了,啥意思 昨晚梦到我家了,我回家前面别人家的房子还好好的,可走到我家那路口,发现没路走了,就我一家被水淹了! 梦到去上学别人家房子被水淹没 梦见别的地方房子被洪水冲塌,但是家里有一个生病的老人,这代表什么意 ... 为什么香蕉放冰箱里会变黑? 如何防止香蕉变黑 香蕉的芯变黑还能吃吗? 香蕉里面有点黑了还能吃吗? 教师资格证认定时是不是要求普通话证书在两年的有效期内? 教师考试普通话等级证书有效期是多久? 为了对称,汉字排版竖排顺序可以从左向右吗 东吴大学的校训 闻香识女人电影 三个人戏弄校长那一段话 要英文的 校训在古代叫什么?古代的书院有没有像现在这样的校训? 校长办公室富有个性的名言 牛津大学的校训是什么? oracle中的over函数怎么用的,什么意思 如何使用连接表替代oracle 的lag() 函数 oracle 多字段查询数据排重,除了row_number()over(partition by )还能... Oracle数据库下 distinct 与row_number() over的用法 oracle里面更新操作能带有四则运算吗 这句select row_number() over (order by ProductID asc) as RowIndex... Oracle中使用to_number()函数,里面有文字怎么解决 (高分求助)两个比较难的SQL2000的SQL语句查询问题,非专家莫入! 我要用oracle根据我截取到的年龄分组,查询显示其它字段,但是不用max... 使用oracle求出制定日期(timestamp或date类型)的后三天日期,请问用哪 ... 股票里多出标准券是什么意思 股票里的标准券怎么取出 有没有关于excel最基础使用(如使用函数、填充柄、换行时自动编号等)的word版本,最好有截图的 装修必须知道的软装搭配知识都有什么? 美式软装搭配要注意什么?搭配技巧有哪些? 黄色的墙面,软装该如何搭配? 现代简约风格软装如何搭配 软装的色彩如何搭配比较好呢? 红木装修软装怎么搭配? 标准券买了要几天能卖