sql2005排名函數

 --http://www.cnblogs.com/nokiaguy/archive/2009/02/05/1384860.html
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([name] varchar(10))
insert [tb]
select 'a' union all
select 'a' union all
select 'a' union all
select 'a' union all
select 'a' union all
select 'b' union all
select 'b' union all
select 'b' union all
select 'b' union all
select 'b' union all
select 'c' union all
select 'c' union all
select 'c' union all
select 'c' union all
select 'c' union all
select 'd' union all
select 'd' union all
select 'd' union all
select 'd' union all
select 'd'
GO

select name,rank() over( order by name) from tb--序號不連續,相同的值的序號相同,接下來的一個值不相同的序號爲前面的行數+1
select name,rank() over( partition by name order by name) from tb--按name分區,同一個區的值都是相同的,所以序號也是相同的,下一個區重新編號

select name,dense_rank() over (order by name) from tb--序號連續,相同的值的序號相同,接下來的一個值不相同的序號爲前面的序號+1
select name,dense_rank() over (partition by name order by name) from tb

select name,row_number() over(order by name) from tb--序號連續,不管值是否相同
select name,row_number() over(partition by name order by name) from tb--序號連續,不管值是否相同,每一個分區重新編號

select name,ntile(3) over(order by name) from tb
select name,ntile(3) over(partition by name order by name) from tb

 

發佈了34 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章