sql server 2000 top+order分页方法解析
1、sql server 2000 top+order分页语句
SELECT * FROM (
SELECT TOP pagesize * FROM(--pagesize 为分页的条数
SELECT TOP offset * --offset 为当前页码乘以pagesize
FROM table order by field desc
) as t1 order by field asc
) as t2 order by field desc
语句看起来有点复杂,其中的算法很简单,我们把语句逐个分解出来,就能明白其中算法的实现了。
2、第一层语句
如果有表a id name 1 一2 二3 三4 四5 五6 六
我们按每页两条记录,并以为倒序排列,第二页的结果应为4,3。
查询语句应为
SELECT * FROM (
SELECT TOP 2 * FROM(--pagesize 为分页的条数
SELECT TOP 2*2 * --offset 为当前页码乘以pagesize
FROM table order by field desc
) as t1 order by field asc
) as t2 order by field desc
按最里层的语句:Select TOP 2*2 * FROM table ORDER BY field DESC
pagesize为2,当前页码page为2时,offset的值应为4,查询出4条记录,按泉酱id的倒序排列。返回的数据应为:6,5,4,3
3、第二层语句
SELECT TOP 2 * FROM ()t1 order by field asc
这个语句的关键就在排序上,这个select语句会对最里层的select语句得到的结果,进行逆向排序。在第一层sql语句返回的结果是:6,5,4,3,逆向排序之后:3,4,5,6。因为分页数据是pagesize等于2,top之后,得到3,4。
4、第三层语句
SELECT * FROM ( ……)as t2 order by field desc
第三层语句只是起到一个正常排序的作用,因为第二层语句把结果逆向排序了。我们要惹芬得到我们想要的倒序,就必需加上此条语句。最后得到的结果就为:4,3;
5、总数不能被分页数整除的解决方法
如果数据罪央态总数除以pagesize不为0时,那么当前的分页数是不准确的。例如,记录总数为7,pagesize为2,当count/pagesize时,page为3,余1。当你按pagsize等于2,offset=pagesize*4查询最后一条记录时,得到的结果却还是两条。所以我们要加一个判断,当count%pagesize不等于零时并且page大于或者等于pagecount时,pagsize等于1,