T-SQL 常用排名函數(shù)
提綱:
-- distinct 剔除重復(fù)項
-- with ties 保留重復(fù)項
-- newid() 新ID
-- row_number() 行號
-- rank() 排名(降一名次)
-- dense_rank() 排名(不降一名次)
-- ntile(頁數(shù)) 分頁
-- 使用ntile(頁數(shù)) 分頁的存儲過程
-- with ties 保留重復(fù)項
-- newid() 新ID
-- row_number() 行號
-- rank() 排名(降一名次)
-- dense_rank() 排名(不降一名次)
-- ntile(頁數(shù)) 分頁
-- 使用ntile(頁數(shù)) 分頁的存儲過程
T-SQL 代碼如下:
use S100801A
go
select * from score
--剔除重復(fù)項
select distinct(score) from score
--保留重復(fù)項(注意:with ties 必須和 top...order by 一起使用)
select top 1 with ties score from score
order by score desc
-- newid()
select newid() as '新ID',* from score
-- 根據(jù)‘成績’字段的降序排列生成‘行號’
select row_number() over(order by Score desc) as '行號',
stuID as '學(xué)號',Score as '成績' from Score
-- 根據(jù)臨時表 temp_Score 的‘行號’rowNum,獲得‘行號’在 1-20之間的記錄。
with temp_Score as
(
select row_number() over(order by Score desc) as rowNum,
stuID,Score from Score
)
select rowNum as '行號',stuID as '學(xué)號',Score as '成績'
from temp_Score where rowNum between 1 and 20;
-- 按照分?jǐn)?shù)進(jìn)行排名。(分?jǐn)?shù)相同的并列名次,下一個名次降一名。)
select StuID,Score,
rank() over(order by Score desc) as '名次'
from Score
-- 按照分?jǐn)?shù)進(jìn)行排名。(分?jǐn)?shù)相同的并列名次,下一個名次不降一名。)
select StuID,Score,
dense_rank() over(order by Score desc) as '名次'
from Score
-- ntile(頁數(shù)):用來將整個表進(jìn)行分頁(或分組),
-- 并指定每條記錄屬于哪一頁。
select stuID,Score,
ntile(3) over(order by Score desc) as '頁碼'
from Score
order by Score Desc
--===================================
-- 使用ntile(頁數(shù))分頁的存儲過程
--===================================
-- 刪除存儲過程
drop procedure up_Page
go
-- 創(chuàng)建存儲過程
create procedure up_Page
@pageCount int, -- 定義每頁顯示的數(shù)據(jù)個數(shù)
@currentPage int -- 選擇當(dāng)前要顯示的數(shù)據(jù)頁
as
select * from (
select ntile((select count(*)/@pageCount from Score))
over(order by StuID) as Page,* from Score
) a where Page=@currentPage
go
--查看結(jié)果
exec up_Page 2,3
-- 表示:每頁顯示2條數(shù)據(jù),當(dāng)前顯示第3頁。
go
select * from score
--剔除重復(fù)項
select distinct(score) from score
--保留重復(fù)項(注意:with ties 必須和 top...order by 一起使用)
select top 1 with ties score from score
order by score desc
-- newid()
select newid() as '新ID',* from score
-- 根據(jù)‘成績’字段的降序排列生成‘行號’
select row_number() over(order by Score desc) as '行號',
stuID as '學(xué)號',Score as '成績' from Score
-- 根據(jù)臨時表 temp_Score 的‘行號’rowNum,獲得‘行號’在 1-20之間的記錄。
with temp_Score as
(
select row_number() over(order by Score desc) as rowNum,
stuID,Score from Score
)
select rowNum as '行號',stuID as '學(xué)號',Score as '成績'
from temp_Score where rowNum between 1 and 20;
-- 按照分?jǐn)?shù)進(jìn)行排名。(分?jǐn)?shù)相同的并列名次,下一個名次降一名。)
select StuID,Score,
rank() over(order by Score desc) as '名次'
from Score
-- 按照分?jǐn)?shù)進(jìn)行排名。(分?jǐn)?shù)相同的并列名次,下一個名次不降一名。)
select StuID,Score,
dense_rank() over(order by Score desc) as '名次'
from Score
-- ntile(頁數(shù)):用來將整個表進(jìn)行分頁(或分組),
-- 并指定每條記錄屬于哪一頁。
select stuID,Score,
ntile(3) over(order by Score desc) as '頁碼'
from Score
order by Score Desc
--===================================
-- 使用ntile(頁數(shù))分頁的存儲過程
--===================================
-- 刪除存儲過程
drop procedure up_Page
go
-- 創(chuàng)建存儲過程
create procedure up_Page
@pageCount int, -- 定義每頁顯示的數(shù)據(jù)個數(shù)
@currentPage int -- 選擇當(dāng)前要顯示的數(shù)據(jù)頁
as
select * from (
select ntile((select count(*)/@pageCount from Score))
over(order by StuID) as Page,* from Score
) a where Page=@currentPage
go
--查看結(jié)果
exec up_Page 2,3
-- 表示:每頁顯示2條數(shù)據(jù),當(dāng)前顯示第3頁。
參考來源:排名函數(shù) (Transact-SQL)
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/e7f917ba-bf4a-4fe0-b342-a91bcf88a71b.htm
| 作者: XuGang 網(wǎng)名:鋼鋼 |
| 出處: http://xugang.cnblogs.com |
| 聲明: 本文版權(quán)歸作者和博客園共有。轉(zhuǎn)載時必須保留此段聲明,且在文章頁面明顯位置給出原文連接地址! |
浙公網(wǎng)安備 33010602011771號