SQL2005利用ROW_NUMBER() OVER實(shí)現(xiàn)分頁(yè)功能
1.首先介紹ROW_NUMBER() OVER的基本用法
2.看一下實(shí)例數(shù)據(jù)
初始化數(shù)據(jù)
create table employee (empid int ,deptid int ,salary decimal(10,2))
insert into employee values(1,10,5500.00)
insert into employee values(2,10,4500.00)
insert into employee values(3,20,1900.00)
insert into employee values(4,20,4800.00)
insert into employee values(5,40,6500.00)
insert into employee values(6,40,14500.00)
insert into employee values(7,40,44500.00)
insert into employee values(8,50,6500.00)
insert into employee values(9,50,7500.00)
數(shù)據(jù)結(jié)果顯示
根據(jù)部門(mén)分組(deptid),顯示每個(gè)部門(mén)的工資(salary)等級(jí)

這是想要得到的結(jié)果第二列根據(jù)部門(mén)進(jìn)行分組,第三列工資由高到低,rank進(jìn)行部門(mén)內(nèi)部的排列
3.簡(jiǎn)單分頁(yè)實(shí)現(xiàn)
SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee
根據(jù)上面1,2兩點(diǎn)我們可以看出這個(gè)SQL只是按照工資降序排序后,并沒(méi)有通過(guò)PARTITION BY COLUMN進(jìn)行分區(qū)(分組),然后通過(guò)row_number()從1開(kāi)始,為每一條分組記錄返回一個(gè)數(shù)字。結(jié)果如下
將上面SQL返回的結(jié)果集當(dāng)作一個(gè)數(shù)據(jù)表
(SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee)as NewTable
假如我們每頁(yè)5條記錄,
那么第一頁(yè)顯示select * from (SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee ) as NewTable where rank between 1 and 5
第二頁(yè)為select * from (SELECT Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee ) as NewTable where rank between 6 and 10
當(dāng)然我們第二頁(yè)這里只有4條記錄。
分頁(yè)就這樣實(shí)現(xiàn)了,對(duì)于多表查詢進(jìn)行分頁(yè)也是同樣的道理。
- sqlserver 通用存儲(chǔ)過(guò)程分頁(yè)代碼(附使用ROW_NUMBER()和不使用ROW_NUMBER()兩種情況性能分析)
- 一個(gè)基于ROW_NUMBER()的通用分頁(yè)存儲(chǔ)過(guò)程代碼
- sqlserver2005使用row_number() over分頁(yè)的實(shí)現(xiàn)方法
- Oracle row_number() over()解析函數(shù)高效實(shí)現(xiàn)分頁(yè)
- C#拼接SQL語(yǔ)句 用ROW_NUMBER實(shí)現(xiàn)的高效分頁(yè)排序
- 高效的SQLSERVER分頁(yè)查詢(推薦)
- 解析數(shù)據(jù)庫(kù)分頁(yè)的兩種方法對(duì)比(row_number()over()和top的對(duì)比)
- 使用row_number()實(shí)現(xiàn)分頁(yè)實(shí)例
- SQLSERVER分頁(yè)查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同
- SQL Server使用row_number分頁(yè)的實(shí)現(xiàn)方法
相關(guān)文章
sqlserver中獲取當(dāng)前日期的午夜的時(shí)間值的實(shí)現(xiàn)方法
MS SQLServer,如何獲取當(dāng)前系統(tǒng)日期的午夜的時(shí)間值的方法,需要的朋友可以參考下。2011-09-09SQL Server中TRUNCATE事務(wù)回滾操作方法
本文介紹在事務(wù)中回滾TRUNCATE操作的方法,并演示了操作的結(jié)果,是可以對(duì)TRUNCATE進(jìn)行回滾操作的。2016-05-05Win2008中安裝的MSSQL2005后無(wú)法訪問(wèn)的解決方法
最近筆者一直在使用Win2008系統(tǒng),不過(guò)發(fā)現(xiàn)一個(gè)很奇怪的問(wèn)題,那就是在該系統(tǒng)上安裝了SQL2005后,再在其他計(jì)算機(jī)訪問(wèn)該主機(jī)顯示不能訪問(wèn)2014-07-07一步一步教你創(chuàng)建SQL 2005計(jì)劃任務(wù)應(yīng)用圖解教程
使用sql的計(jì)劃任務(wù)可以處理一些特殊環(huán)境的數(shù)據(jù),除了使用windows系統(tǒng)的計(jì)劃任務(wù)來(lái)定時(shí)處理,不過(guò)要配合程序才行,有些事情可以直接使用sql本身的計(jì)劃任務(wù),更方便,所以本文圖解一下Sql2005計(jì)劃任務(wù)的創(chuàng)建使用。2010-03-03MSSQL 大量數(shù)據(jù)時(shí),建立索引或添加字段后保存更改提示超時(shí)的解決方法
一般我們都喜歡用數(shù)據(jù)庫(kù)管理器的UI來(lái)對(duì)數(shù)據(jù)表結(jié)構(gòu)進(jìn)行更改,然后自然而然地點(diǎn)"保存"按鈕進(jìn)行保存,但數(shù)據(jù)量比較大的時(shí)候,用這招往往會(huì)出現(xiàn)"無(wú)法創(chuàng)建索引“IX_索引名”。 超時(shí)時(shí)間已到。在操作完成之前超時(shí)時(shí)間已過(guò)或服務(wù)器未響應(yīng)。2011-08-08SQLServer2005 沒(méi)有服務(wù)器名稱的兩種解決方法
這篇文章主要介紹了SQLServer2005 沒(méi)有服務(wù)器名稱的兩種解決方法,需要的朋友可以參考下2015-01-01SQL Server 2005 模板參數(shù)使用說(shuō)明
如果你用SQL Server 2005 Management Studio建立函數(shù)或存儲(chǔ)過(guò)程,你會(huì)注意到這些新窗口中都是模板。通常,你可以獲得一個(gè)散布著標(biāo)記的框架。2009-01-01Sql Server 2005中查詢用分隔符分割的內(nèi)容中是否包含其中一個(gè)內(nèi)容
Sql Server 2005中查詢用分隔符分割的內(nèi)容中是否包含其中一個(gè)內(nèi)容,多個(gè)朋友給予的參考。2011-10-10SQL Server2005打開(kāi)數(shù)據(jù)表中的XML內(nèi)容時(shí)報(bào)錯(cuò)的解決辦法
從SQL Server2005開(kāi)始提供了一種新的數(shù)據(jù)類型XML type,它允許用戶將數(shù)據(jù)以XML文件的格式直接存儲(chǔ)到數(shù)據(jù)表中2012-02-02