首页 新闻 赞助 找找看

sql server 2000分页查询

0
悬赏园豆:30 [待解决问题]

sql server 2000分页查询,排序是按照数量来排序,这个字段不是唯一,有很多重复的数据,

请问用是方法可以实现。在2008中ROW_NUMBER() OVER函数在2000中用不了,请问用什么可以代替

明天会更好yao的主页 明天会更好yao | 初学一级 | 园豆:100
提问于:2013-11-29 00:18
< >
分享
所有回答(6)
0

自己添加一个自增定义,用while循环再分页,估计只能这样吧

拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2013-11-29 00:52
0

在sqlserver2000中 我知道有两种

--第一种 not in

--先查询一部分数据排序,排除在外;适合用与sql server 2000及更高版本

select top 10 * from Info where uId not in (select top 30 uId from Info order by uId)order by uId

--第二种 先查出一部分数据 排序 用Max找出最大Id 然后将其Max(uId)最大排除在外;适合用与sql server 2000及更高版本
select top 10 * from Info
where uId >
(
select ISNULL(MAX(uId),0)
from
(
select top 30 uId from Info order by uId
) a
)
order by uId
View Code
秋壶冰月 | 园豆:5903 (大侠五级) | 2013-11-29 09:35

这种方式只适合用来排序的那个字段是唯一的,如果不唯一就不可以了

支持(0) 反对(0) 明天会更好yao | 园豆:100 (初学一级) | 2013-11-29 09:37

@明天会更好yao: 亲,你没有考虑你的数据超过百万了,你不加一个主键,查询数据会很慢的啊!

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2013-11-29 10:02

@秋壶冰月: 有主键的,我现在的需求是这样的,是一个投票系统,我需要看到的是票数,那就要以票数排序,要不然就不方便查看

支持(0) 反对(0) 明天会更好yao | 园豆:100 (初学一级) | 2013-11-29 10:04

@明天会更好yao: 先按主键 将分页查询的数据作为一个结果集 在按票数排序

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2013-11-29 10:08
0

 一般分页都要依赖一个唯一列,如果没有,那就组合几个列 保证能唯一。

一般在建立表结构时,都会建立一个 自增列 id int 类型,目的就是为了将来分页使用,如果lz没有这个自增列,数量不大的话你就导入一站新表,记得建立自增列。

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-11-29 09:37
0

4种不同的分页方式,看你选取哪种?ROW_NUMBER()只能在2005之后的版本使用.

 

--写法1,not in/top
select top 50 * from pagetest 
where id not in (select top 9900 id from pagetest order by id)
order by id

--写法2,not exists
select top 50 * from pagetest 
where not exists 
(select 1 from (select top 9900 id from pagetest order by id)a  where a.id=pagetest.id)
order by id

--写法3,max/top
select top 50 * from pagetest
where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
order by id

--写法4,row_number()
select top 50 * from 
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900
薛凯凯圆滚滚 | 园豆:36 (初学一级) | 2013-11-29 09:45
0

建议使用Hibernate管理 然后会很方便 只需要指定两个查询参数,x、y、即可 x表示从第几行开始查、y表示没差查多少行、hql语句也只有一条 from testTable limit(x,y) 就好了

Java小伙 | 园豆:26 (初学一级) | 2013-11-29 10:10

这个是MYsql 数据库可以这个sql service可以吗

支持(0) 反对(0) 明天会更好yao | 园豆:100 (初学一级) | 2013-11-29 10:11

@明天会更好yao: hibernate 是java语言里的一种框架,支持多种数据库,可以自动将语句转换为对应数据库的语句的

支持(0) 反对(0) Java小伙 | 园豆:26 (初学一级) | 2013-11-29 19:36
0

由于有重复数据,所以Max方式排序排除掉,那么就可以采用Top not in方式进行排序

 

select top pageSize * from t where pk not in pk (select top pageSize*(pageIndex-1) pk from t)

幻天芒 | 园豆:37175 (高人七级) | 2013-11-29 10:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册