sql server 2000 top+order分页方法解析
1、sql server 2000 top+order分页语句SELECT*FROM(SELECTTOPpagesize*FROM(幻腾寂埒--pagesize为分页的条数SELECTTOPoffset*--offset为当前页码乘以pagesizeFROMtableorderbyfielddesc)ast1orderby fieldasc)ast2orderbyfielddesc语句看起来有点复杂,其中的算法很简单,我们把语句逐个分解出来,就能明白其中算法的实现了。
2、第一层语句如果有表aid name1 一2 二3 三4 四5 五6 籼瑜尬鲞六我们按每页两条记录,并以为倒序排坐逃缥卯列,第二页的结果应为4,3。查询语句应为SELECT*FROM(SELECTTOP 2 *FROM(--pagesize为分页的条数SELECTTOP 2*2 *--offset为当前页码乘以pagesizeFROMtableorderbyfielddesc)ast1orderby fieldasc)ast2orderbyfielddesc按最里层的语句:Select TOP 2*2 *FROMtableORDERBYfieldDESCpagesize为2,当前页码page为2时,offset的值应为4,查询出4条记录,按id的倒序排列。返回的数据应为:6,5,4,3
3、第二层语句SELECTTOP 2 *FROM()t1orderbyfieldasc这个语句的关键就在排序上,这个select语句会对最里层的select语句得到的结果,进行逆向排序。在第一层sql语句返回的结果是:6,5,4,3,逆向排序之后:3,4,5,6。因为分页数据是pagesize等于2,top之后,得到3,4。
4、第三层语句SELECT*FROM( ……)ast2orderbyfielddesc第三层语句只是起到一个正常排序的作用,因为第二层语句把结果逆向排序了。我们要得到我们想要的倒序,就必需加上此条语句。最后得到的结果就为:4,3;
5、总数不能被分页数整除的解决方法如果数据总数除以pagesize不为0时,那么当前的分页数是不准确的。例如,记录总数为7,pagesize为2,当count/pagesize时,page为3,余1。当你按pagsize等于2,offset=pagesize*4查询最后一条记录时,得到的结果却还是两条。所以我们要加一个判断,当count%pagesize不等于零时并且page大于或者等于pagecount时,pagsize等于1,