sql server 2000分页查询,排序是按照数量来排序,这个字段不是唯一,有很多重复的数据,
请问用是方法可以实现。在2008中ROW_NUMBER() OVER函数在2000中用不了,请问用什么可以代替
自己添加一个自增定义,用while循环再分页,估计只能这样吧
在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
这种方式只适合用来排序的那个字段是唯一的,如果不唯一就不可以了
@明天会更好yao: 亲,你没有考虑你的数据超过百万了,你不加一个主键,查询数据会很慢的啊!
@秋壶冰月: 有主键的,我现在的需求是这样的,是一个投票系统,我需要看到的是票数,那就要以票数排序,要不然就不方便查看
@明天会更好yao: 先按主键 将分页查询的数据作为一个结果集 在按票数排序
一般分页都要依赖一个唯一列,如果没有,那就组合几个列 保证能唯一。
一般在建立表结构时,都会建立一个 自增列 id int 类型,目的就是为了将来分页使用,如果lz没有这个自增列,数量不大的话你就导入一站新表,记得建立自增列。
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
建议使用Hibernate管理 然后会很方便 只需要指定两个查询参数,x、y、即可 x表示从第几行开始查、y表示没差查多少行、hql语句也只有一条 from testTable limit(x,y) 就好了
这个是MYsql 数据库可以这个sql service可以吗
@明天会更好yao: hibernate 是java语言里的一种框架,支持多种数据库,可以自动将语句转换为对应数据库的语句的
由于有重复数据,所以Max方式排序排除掉,那么就可以采用Top not in方式进行排序
select top pageSize * from t where pk not in pk (select top pageSize*(pageIndex-1) pk from t)