求一套分页查询语句

风中云 2012-03-29 09:12:20
如题:我这里有一个sql 2000的分页查询,
select top pagesize * from table where pk_id not in (select top pagesize*(pageno-1) pk_id from table)
1、如果是sql 2005、sql 2008这个分页查询又该怎么写?
2、若是mysql这个分页该怎么实现?是否也分不同的版本?若分版本,请帖出不同版本的实现
...全文
113 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
风中云 2012-04-10
  • 打赏
  • 举报
回复
String sql = " select pk_id, operator_id, channel_id, msg_content, beg_date, end_date, beg_time, end_time,status, created_date from"
+ " (select row_number() over(order by pk_id desc) as rownumber "
+ ", t.pk_id, t.operator_id, t.channel_id, c.msg_content, t.beg_date, t.end_date, t.beg_time, t.end_time, t.status, t.created_date"
+ " from emap_sms_mt_task where rownumber between "
+ (topNum * (pageNo - 1))
+ " and "
+ (topNum * pageNo)
+ " ) t "
+ " inner join emap_sms_mt_content c on t.pk_id=c.task_id where 1=1 ";
这个是我一个分页查询语句,前边的select字段不加别名是错误的吗
尼古拉特斯拉 2012-04-01
  • 打赏
  • 举报
回复
select * from
(select *,row_num=row_number() over(order by pk_id) from table) t where row_num between pagesize*(pageno-1) and pagesize*pageno
q465897859 2012-03-30
  • 打赏
  • 举报
回复
alter proc pro_fy
@sql varchar(max),--需要查询的sql语句
@Pgcount int=10,--每页行数
@pgno int=1 --页码
as
begin
declare @str varchar(max)
set @str='declare @pgcount int,@pgno int,@start int,@end int,@sum int'
set @str=@str+CHAR(10)+'set @pgcount='+CAST(@Pgcount as varchar(10))+''
set @str=@str+CHAR(10)+'set @pgno='+CAST(@Pgno as varchar(10))+''
set @str=@str+CHAR(10)+'select @start=@pgcount*(@pgno-1)+1,@end=@pgcount*@pgno'
set @str=@str+CHAR(10)+'select * into #tb from ('+@sql+') a'
set @str=@str+CHAR(10)+'select @sum=ceiling(count(*)*1.0/@pgcount) from #tb'
set @str=@str+CHAR(10)+'select a.* from ('
set @str=@str+CHAR(10)+'select *,row_number() over(order by getdate()) as 行数,''第''+cast(@pgno as varchar(10))+''页'' as 页码,@sum as 总页数 from #tb) a'
set @str=@str+CHAR(10)+'where a.行数 between @start and @end'
exec(@str)
end
exec pro_fy 'select * from dbo.成绩信息表',7,1
tbMakerZeng 2012-03-30
  • 打赏
  • 举报
回复
Sql 2012 支持 这样的
select * from 表名 order by 列名 offset 10000 row fetch next 10 rows only
haitao 2012-03-30
  • 打赏
  • 举报
回复
mysql、postgreesql、interbase(firebird)早就支持limit 开始行号,取行数
sql2012刚刚开始支持开始行号
sql2005/2008有row_number()
sql2000就只能靠反复倒腾法(因为它只有top 取行数,无法指定开始行号)
寡亾 2012-03-29
  • 打赏
  • 举报
回复

话说只用过SQL、
风中云 2012-03-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SQL code

1、

[code=SQL]select * from
(select *,row_num=ror_number() over (order by pk_id) from tb) b
where row_num between pagesize*(pageno-1) and pagesize*pageno


2、

select * from tb l……
[/Quote]

你好,你给出的第一个sql和1楼的都是同一个问题'row_number' 不是可以识别的 函数名。
第二个是mysql的查询,但是只能查前10行吧,具体分页是怎么实现的呢?
风中云 2012-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
sql 2005、sql 2008,可以用:
select * from
(select *,row_number() orver(order by pk_id) xh from table) a xh between pagesize*(pageno-1) and pagesize
[/Quote]
你好,我试了下你给的sql,但是报错了'row_number' 不是可以识别的 函数名。
这个是为什么?
黄_瓜 2012-03-29
  • 打赏
  • 举报
回复
1、

[code=SQL]select * from
(select *,row_num=ror_number() over (order by pk_id) from tb) b
where row_num between pagesize*(pageno-1) and pagesize*pageno


2、

select * from tb limit 0,10[/code]
xiaoxiangqing 2012-03-29
  • 打赏
  • 举报
回复
sql 2005、sql 2008,可以用:
select * from
(select *,row_number() orver(order by pk_id) xh from table) a xh between pagesize*(pageno-1) and pagesize
风中云 2012-03-29
  • 打赏
  • 举报
回复
我的数据库就是2008的,我检查了下,我的引擎还是用的2000的,所以还是用不成row_number()函数

那个mysql分页查询怎么排序呢?
D_B_H 2012-03-29
  • 打赏
  • 举报
回复
sqlserver2000下是没有row_number()
但你问的就是2005+
haiyun141 2012-03-29
  • 打赏
  • 举报
回复
每页 100 数据 查询第 5 页数据 适用数据量小的分页查询

select top 100 * from
(
select top (5+1)*100 * from tableName order by PK asc
) order by PK desc

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧