平時,我們對數據進行分頁,然后將分頁后的數據再進行排序輸出。這樣做只是針對每次請求,也就是前TOP個數據進行了排序,並不是將數據庫中的所有的數據進行了排序。當我們需要將數據庫中的所有數據排序后在進行分頁輸出時該怎么做呢?
總體思路是:使用SqlServer中的ROW_NUMBER() OVER(按某一屬性升序或降序)函數來對我們所有的數據進行排序,從1開始,為每一條分組記錄返回一個數字。
使用:SELECT * FROM (SELECT *,row=row_number() OVER(ORDER BY name DESC) FROM tableOne ) AS rowTable WHERE rowTable BETWEEN + ((curPage.intValue() - 1) * PageCount.intValue() + 1) + " AND " + curPage.intValue()*PageCount.intValue();
這句話的意思就是先將tableOne中所有的數據按照name字段的降序排好序作為新表rowTable,然后按照當前頁curPage和每頁行數PageCount進行分頁,因為排序是從1開始的,所以PageCount也是從1開始,這樣就可以做到先將所有數據排序在進行分頁。
