亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用一句SQL取出第 m 條到第 n 條記錄的方法

系統 1851 0
從Table?表中取出第?m?條到第?n?條的記錄:(Not?In?版本)
? ?
? ? 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為上標,n為下標,例如取出第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中提供了函數ROW_NUMBER() ,可以更方便的來實現
--按BirthDate排序,取第10條到20條的數據
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 () 函數是Sql?2005中新添的一個函數。通常它被用在分頁的SQL語句中。

微軟官方的對此函數的描述是:返回結果集分區內行的序列號,每個分區的第一行從?1?開始。

我對此的理解:利用此函數可以為表中的某個字段建立序列,從1開始。就是說,根據已存在的某列,利用此函數可建立一新列,新列是數字,按照已存在列的順序從1開始。

???上邊可能說的不是很清楚,請結合下邊這個例子來看吧!

?


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> ?1 USE ?Northwind
?2 GO
?3
?4 --
?5 SELECT ?OrderID,?
?6 ????CustomerID,?
?7 ????OrderDate
?8 FROM ?dbo.Orders? WITH (NOLOCK)
?9
10 SELECT ?OrderID,?
11 ????CustomerID,?
12 ????OrderDate,?
13 ????ROW_NUMBER()? OVER ( ORDER ? BY ?orderID? DESC )? AS ?字段編號
14 FROM ?dbo.Orders? WITH (NOLOCK)

第一個查詢只是一個普通的查詢,查詢出Orders表中的3個字段的記錄。其結果為:

用一句SQL取出第 m 條到第 n 條記錄的方法

?

第二個查詢相比第一個查詢僅僅是多了“? ROW_NUMBER () ? OVER ( ORDER ? BY ?orderID? DESC ) ? AS ? 字段編號 ? 這段語句。我們來分析一下這段語句。

這段語句的作用就是利用 ROW_NUMBER () 函數根據OrderID這列來生成一個新的數據列,這列的名稱為字段編號。然后我們根據 ORDER ? BY ?orderID? DESC 來指定字段編號這列按照OrderID的逆序來生成,結果如下:

用一句SQL取出第 m 條到第 n 條記錄的方法

?

比較兩個結果集,會發現第二個結果集是按照 OrderID 字段逆序的記錄,其實也可看成是字段編號這個字段的正序排序, ROW_NUMBER () 函數相當于為SELECT語句末尾加了ORDER?BY子句,第二個SELECT語句其實等價于:

?


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 SELECT ?OrderID,?
2 ????CustomerID,?
3 ????OrderDate,?
4 ????ROW_NUMBER()? OVER ( ORDER ? BY ?OrderID? DESC )? AS ?字段編號
5 FROM ?dbo.Orders? WITH (NOLOCK)
6 ORDER ? BY ?字段編號ASC

?

下邊來看一個對 ROW_NUMBER () 函數的簡單分頁應用。

?


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> ?1 -- Partition?Page?Demo
?2 /**/ /* ?取出第-?200條的記錄(記錄須按OrderID排序) */
?3
?4 WITH ?OrdersByOrderIDASC? AS ?
?5 (
?6 ???? SELECT ?OrderID,?
?7 ????????CustomerID,?
?8 ????????OrderDate,?
?9 ????????ROW_NUMBER()? OVER ( ORDER ? BY ?orderID? ASC )? AS ?字段編號
10 ???? FROM ?dbo.Orders? WITH (NOLOCK)
11 )
12
13 SELECT ? * ?
14 FROM ?OrdersByOrderIDASC? WITH (NOLOCK)
15 WHERE ?字段編號BETWEEN? 100 ? AND ? 110

?

首先把應用 ROW_NUMBER () 函數后的結果集存在一張臨時表中,然后以字段編號這個字段為條件,使用BETWEEN關鍵字過濾相應的記錄。

用一句SQL取出第 m 條到第 n 條記錄的方法


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色www 永久免费网站 | 动漫美女h片黄动漫在线观看 | 日本xoxo| 97高清国语自产拍免费 | 在线一区播放 | 黄视频在线观看网站 | 色无极综合 | 国产视频手机在线观看 | 精品久久一区 | 国产日韩综合 | 九九99九九在线精品视频 | 欧美激情精品久久久久久久九九九 | 草草草在线视频 | 亚洲一区天堂 | 免费超级淫片日本高清视频 | 国产精品久久久久国产精品三级 | xx性欧美高清 | 在线亚洲精品国产波多野结衣 | 中文字幕日韩精品中文区 | 久草在线观看福利 | 成人久久久观看免费毛片 | 成年男女免费视频观看性 | 四虎影院免费在线播放 | 在线精品免费视频 | 久久机热这里只有精品无需 | 久久国产乱子伦精品免 | 亚洲婷婷综合色高清在线 | 青草青在线免费视频 | 亚洲国产精品综合久久久 | 国产精品视频免费看 | 成年女人aaaaa毛片 | 男人的私人影院 | 一级毛片免费不卡 | 国内精品伊人久久久久妇 | 99毛片| 久久e| 日韩中文字幕精品 | 国产精品欧美亚洲韩国日本 | 国产精品1区 | 成年超爽大片免费视频播放 | 毛片毛片|