我觀前輩的帖子皆由於數據庫的SQL大不一致且SQL SERVERACCESS等菜鳥級數據庫沒有如rowid_n_obs等之類的輔助列空有BETWEEN運算符而無用武之地又無如except之類的數據集運算符真是令無數英雄盡折腰
偶詳觀各數據庫SQL得出是數據庫就有取前面N條記錄的SQL語法如什麼select top n*****之類的語法而數據分頁的關鍵問題是取後N條記錄的語法偶深思良久最後小悟故出此言還忘前輩們多多指點
取記錄集後N條記錄的大法
假設
有一sql語句將產生條記錄 (select 唯一ID其他字段 from 表集 where 條件 order by 排序)
每頁顯示條記錄當前顯示第頁
實現如下
select * from
(
select * from (select top * 唯一ID其他字段 from 表集 where 條件 order by 排序) as a
union all
select * from (select top * 唯一ID其他字段 from 表集 where 條件 order by 排序) as b
)
a
group by 唯一ID其他字段 having count(唯一ID)= order by 排序
運行此SQL至此取記錄集後N條記錄大法就些完畢
詳細說明
此SQL語句的關鍵應用技巧在於union all和分組上的條件過濾語句
大家可以根據此技巧完全可以做出一個通用的分頁方法如直接由用戶傳入sqlstr(sql語句)NumPerPage(每頁顯示數)currpage(當前頁)自己在再函數內組織成通成的SQL分頁語句
備注
當前頁為的話就不需要運行該SQL了直接TOP一下就OK了由於沒有環境該SQL性能無法測試但相信不會低效運行平台在accesssqlserver上都可運行其它數據庫平台只需改top關鍵字應該就可以就地運行了
From:http://tw.wingwit.com/Article/program/net/201311/13709.html