有一张名次表名次字段的数据是这样的
1,2,3,3,5,5,7....................................
这样的结果,就是有并列的后面的一个名次就没有了,怎么处理可以让上面的变成:
1,2,3,3,4,4,5....................................
这样的怎么写这个sql语句,请教了
create table xs (sno char(10), mc int) insert into xs values('zf',1) insert into xs values('zf',2) insert into xs values('zf',3) insert into xs values('zf',3) insert into xs values('zf',5) insert into xs values('zf',5) insert into xs values('zf',7) insert into xs values('zf',8) select * from xs --变成:1 2 3 3 4 4 5 6 --解决方案 alter table xs add xiuz int default 0 update xs set xiuz=0 declare @min int, @xiuz int=0 select @min=MIN(mc) from xs where xiuz=0 while (1=1) begin set @xiuz=@xiuz+1 update xs set xiuz=@xiuz where mc=@min if exists(select 1 from xs where xiuz=0) begin select @min=MIN(mc) from xs where xiuz=0 end else break end --查询 select * from xs
这个是可以,但是我这里不能修改表结构的,而且还要用程序去执行
@明天会更好yao: 我只是提供一个思路,其实这个列是可以不用增加的,在sql中能实现的,在其他环境也是能耐实现的,不要一模一样的答案撒……
@天堂的鸽子: 这个思路我清楚了,可是转换到其他地方,我写的就不对,还得请教
你用的是mssql?
是的话可以用 dense_rank() over (order by 名次字段)
不是,sql server 2000
@明天会更好yao: ms sql 我就是Microsoft SQL
不过你用的是2000 应该不支持这个函数
要在sql server 2005及以上版本才能运行