? ?
? ? SELECT ? TOP ?n - m + 1 ? * ?
? ? FROM ? Table ?
? ? WHERE ?(id? NOT ? IN ?( SELECT ? TOP ?m - 1 ?id? FROM ? Table ?))??
? ?
? ?
? ? -- 從TABLE表中取出第m到n條記錄?(Exists版本)
? ?
? SELECT ? TOP ?n - m + 1 ? * ? FROM ? TABLE ? AS ?a? WHERE ? Not ? Exists
? ( Select ? * ? From ?( Select ? Top ?m - 1 ? * ? From ? TABLE ? order ? by ?id)?b? Where ?b.id = a.id?)?
? Order ? by ?id
?
?
? -- m為上標(biāo),n為下標(biāo),例如取出第8到12條記錄,m=8,n=12,Table為表名
?
? Select ? Top ?n - m + 1 ? * ? From ? Table ?
? Where ?Id > ( Select ? Max (Id)? From ?
? ( Select ? Top ?m - 1 ?Id? From ? Table ? Order ? By ?Id? Asc )? Temp )?
? Order ? By ?Id? Asc ??
在sql server 2005中提供了函數(shù)ROW_NUMBER() ,可以更方便的來實現(xiàn)
--按BirthDate排序,取第10條到20條的數(shù)據(jù)
SELECT BirthDate FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY BirthDate) AS a,BirthDate
FROM HumanResources.Employee
) AS a
WHERE a BETWEEN 10 AND 20
ROW_NUMBER () 函數(shù)是Sql?2005中新添的一個函數(shù)。通常它被用在分頁的SQL語句中。
微軟官方的對此函數(shù)的描述是:返回結(jié)果集分區(qū)內(nèi)行的序列號,每個分區(qū)的第一行從?1?開始。
我對此的理解:利用此函數(shù)可以為表中的某個字段建立序列,從1開始。就是說,根據(jù)已存在的某列,利用此函數(shù)可建立一新列,新列是數(shù)字,按照已存在列的順序從1開始。
???上邊可能說的不是很清楚,請結(jié)合下邊這個例子來看吧!
?

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> ?1

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

第一個查詢只是一個普通的查詢,查詢出Orders表中的3個字段的記錄。其結(jié)果為:
?
第二個查詢相比第一個查詢僅僅是多了“? ROW_NUMBER () ? OVER ( ORDER ? BY ?orderID? DESC ) ? AS ? 字段編號 ? ” 這段語句。我們來分析一下這段語句。
這段語句的作用就是利用 ROW_NUMBER () 函數(shù)根據(jù)OrderID這列來生成一個新的數(shù)據(jù)列,這列的名稱為字段編號。然后我們根據(jù) ORDER ? BY ?orderID? DESC 來指定字段編號這列按照OrderID的逆序來生成,結(jié)果如下:
?
比較兩個結(jié)果集,會發(fā)現(xiàn)第二個結(jié)果集是按照 OrderID 字段逆序的記錄,其實也可看成是字段編號這個字段的正序排序, ROW_NUMBER () 函數(shù)相當(dāng)于為SELECT語句末尾加了ORDER?BY子句,第二個SELECT語句其實等價于:
?

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1

2

3

4

5

6

?
下邊來看一個對 ROW_NUMBER () 函數(shù)的簡單分頁應(yīng)用。
?

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> ?1

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

?
首先把應(yīng)用 ROW_NUMBER () 函數(shù)后的結(jié)果集存在一張臨時表中,然后以字段編號這個字段為條件,使用BETWEEN關(guān)鍵字過濾相應(yīng)的記錄。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
