SQLserver排序函数细说(二)

2014-11-24 15:32:53 · 作者: · 浏览: 2
定数目的组中。各个组有编号,编号从一开始。对于每一个行,NTILE 将返回此行所属的组的编号。

  如果分区的行数不能被 integer_expression 整除,则将导致一个成员有两种大小不同的组。按照 OVER 子句指定的顺序,较大的组排在较小的组前面。

drop table dbo.wzg_test

create table dbo.wzg_test(

id int

,name varchar(10)

,grade decimal

)

declare @i int = 1

declare @j int = 60

while @i <= 20

begin

if @i%5 = 0

set @j = @j+10

insert into dbo.wzg_test values(@i,'wzg'+convert(varchar(10),@i),@j)

set @i = @i + 1

end

select row_number() over ( order by id asc) as row_number, *

from dbo.wzg_test

order by id asc

select row_number() over (partition by grade order by id asc) as row_number, *

from dbo.wzg_test

select rank() over (order by grade asc) as rank, *

from dbo.wzg_test

order by id asc

select dense_rank() over (order by grade asc) as dense_rank, *

from dbo.wzg_test

order by id asc

select ntile(3) over (order by grade asc) as ntile, *

from dbo.wzg_test

order by id asc