如何在SQL中對行進行動态編号
<a href="http://https//dream4ever.org/index.php?" target="_blank">DreamLand</a>
如何在SQL中對行進行動态編号,加行号這個問題,在資料庫查詢中,是經典的問題.
我把現在的方法整理一下,分享一下技巧吧
代碼基于pubs樣闆資料庫
在SQL中,一般就這兩種方法.
1.使用臨時表
可以使用select into 建立臨時表,在第一列,加入Identify(int,1,1)作為行号,
這樣在産生的臨時表中,結果集就有了行号.也是目前效率最高的方法.
這種方法不能用于視圖
代碼:
set nocount on
select IDentify(int,1,1) 'RowOrder',au_lname,au_fname into #tmp from authors
select * frm #tmp
drop table #tmp
2.使用自連接配接
不用臨時表,在SQL語句中,動态的進行排序.這種方法用到的連接配接是自連接配接,連接配接關系一般是
大于,
代碼
select rank=count(*), a1.au_lname, a1.au_fname
from authors a1 inner join authors a2 on a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname
group by a1.au_lname, a1.au_fname
order by count(*)
運作結果:
rank au_lname au_fname
----------- ---------------------------------------- --------------------
1 Bennet Abraham
2 Blotchet-Halls Reginald
3 Carson Cheryl
4 DeFrance Michel
5 del Castillo Innes
6 Dull Ann
7 Greene Morningstar
... ....
缺點:
1.使用自聯接,是以該方法不适用于處理大量行。它适用于處理幾百行。
對于大型表,一定要使用索引以避免進行大範圍的搜尋,或用第一種方法.
2.不能正常處理重複值。當比較重複值時,會出現不連續的行編号。
如果不希望出現這種現象,可以在電子表格中插入結果時隐藏排序列,而是使用電子表格編号。
或用第一種方法
優點:
1.這些查詢可以用于視圖和結果格式設定中
在結果集中插入了行号,現在就可以将結果集合緩存起來,然後使用DataView,加入過濾條件
RowNum>PageIndex*PageSize And RowNum<=(PageIndex+1)*PageSize
就能實作快速的分頁,而且不論你的頁面資料綁定控件是什麼(DataList,DataGrid,還是Repeate都可以)。
如果你使用的是DataGrid,那麼建議不要使用這種技術。因為DataGrid的分頁效率和它差不多。
本文轉自斯克迪亞部落格園部落格,原文連結:http://www.cnblogs.com/sgsoft/archive/2004/11/11/62591.html,如需轉載請自行聯系原作者