SQLServer 分页问题,求助!!

maodie007 2007-11-16 11:19:51
麻烦大家帮下忙好吗? 我用的是SQLServer
现在通过一句语句能将3个表内的信息提取出来有用的信息
A,B,C为3个表 比如select A.aaa,B.bbb,C.ccc FROM A,B,C WHERE A.ccc=B.ddd AND B.eee=C.fff

然后我想对上面查询出来的信息再来进行分页,利用下面这个模板进行分页
对每页大小为X条的记录,要求查询第N页的记录为
SELECT TOP N * FROM tb
WHERE PRIMARY_KEY NOT IN (
SELECT TOP (N-1)*X PRIMARY_KEY FROM tb)

设定这里PRIMARY_KEY定为 C表中的列ppp(标识列)

要实现这个查询,能否用一句话写出来呢?
如果不能那么要怎么才能好点的解决这个问题呢?
...全文
54 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengwenjian 2007-11-16
  • 打赏
  • 举报
回复
如果是SQL Server 2005的话

SELECT TOP N * FROM
(select A.aaa,B.bbb,C.ccc,
RowNumber = ROW_NUMBER() OVER(Order By A.aaa)
FROM A,B,C
WHERE A.ccc=B.ddd AND B.eee=C.fff) tb
WHERE RowNumber NOT IN (
SELECT TOP (N-1)*X RowNumber FROM (select A.aaa,B.bbb,C.ccc,
RowNumber = ROW_NUMBER() OVER(Order By A.aaa)
FROM A,B,C
WHERE A.ccc=B.ddd AND B.eee=C.fff) tb)



-狙击手- 2007-11-16
  • 打赏
  • 举报
回复
1------------------------------------------------
--游标不是明智的选择,在小数据量时可以使用
create procedure hahaha
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

--- 测试:
exec hahaha '任何条件的SQL语句',2,10
maodie007 2007-11-16
  • 打赏
  • 举报
回复
谢谢你们了,都试了,还是不行,现在很简单就是对多个表查询后的结果如何进行分页?
谢谢大家了!
pt1314917 2007-11-16
  • 打赏
  • 举报
回复

上面掉了
是这样:
select top n A.aaa,B.bbb,C.ccc FROM A,B,C WHERE A.ccc=B.ddd AND B.eee=C.fff
and c.ppp NOT IN
(SELECT TOP (N-1)*X ppp FROM (select A.aaa,B.bbb,C.ccc,c.ppp FROM A,B,C WHERE A.ccc=B.ddd AND B.eee=C.fff)tb)

这个CSDN超慢。我公司的网速已经是光纤了。还是那么慢才刷出来,特别是这个回复框,受不了了。。
pt1314917 2007-11-16
  • 打赏
  • 举报
回复

没试过效果,楼主可以试一下。错了不要骂人。呵呵`
select top n A.aaa,B.bbb,C.ccc FROM A,B,C WHERE A.ccc=B.ddd AND B.eee=C.fff
and c.ppp NOT IN
(SELECT TOP (N-1)*X ppp FROM (select A.aaa,B.bbb,C.ccc FROM A,B,C WHERE A.ccc=B.ddd AND B.eee=C.fff)tb)

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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