首页 新闻 搜索 专区 学院

sql语句查询

0
悬赏园豆:5 [待解决问题]

有一张名次表名次字段的数据是这样的

1,2,3,3,5,5,7....................................

这样的结果,就是有并列的后面的一个名次就没有了,怎么处理可以让上面的变成:

1,2,3,3,4,4,5....................................

这样的怎么写这个sql语句,请教了

明天会更好yao的主页 明天会更好yao | 初学一级 | 园豆:100
提问于:2013-11-24 10:46
< >
分享
所有回答(2)
0
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
View Code

天堂的鸽子 | 园豆:138 (初学一级) | 2013-11-24 14:08

这个是可以,但是我这里不能修改表结构的,而且还要用程序去执行

支持(0) 反对(0) 明天会更好yao | 园豆:100 (初学一级) | 2013-11-25 09:06

@明天会更好yao: 我只是提供一个思路,其实这个列是可以不用增加的,在sql中能实现的,在其他环境也是能耐实现的,不要一模一样的答案撒……

支持(0) 反对(0) 天堂的鸽子 | 园豆:138 (初学一级) | 2013-11-25 09:19

@天堂的鸽子: 这个思路我清楚了,可是转换到其他地方,我写的就不对,还得请教

支持(0) 反对(0) 明天会更好yao | 园豆:100 (初学一级) | 2013-11-25 09:49
0

你用的是mssql?

是的话可以用 dense_rank() over (order by 名次字段)

Albert Fei | 园豆:2102 (老鸟四级) | 2013-11-25 11:03

不是,sql server 2000

支持(1) 反对(0) 明天会更好yao | 园豆:100 (初学一级) | 2013-11-25 11:27

@明天会更好yao: ms sql  我就是Microsoft SQL

不过你用的是2000 应该不支持这个函数

要在sql server 2005及以上版本才能运行

支持(0) 反对(0) Albert Fei | 园豆:2102 (老鸟四级) | 2013-11-25 13:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册