如何在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.這些查詢可以用于視圖和結果格式設置中 |
溫馨提示:喜歡本站的話,請收藏一下本站!