如我有记录
成绩表
学生 分数 名次
小张 100 0
小王 60 0
小李 70 0
... ...
... ...
小黄 81 0
----------------------
如有以上数据
然后我要按分数更新名次
也就是名次为
Select * from 成绩表 order by 分类 desc写1条SQL怎么来更新上面的表谢谢
成绩表
学生 分数 名次
小张 100 0
小王 60 0
小李 70 0
... ...
... ...
小黄 81 0
----------------------
如有以上数据
然后我要按分数更新名次
也就是名次为
Select * from 成绩表 order by 分类 desc写1条SQL怎么来更新上面的表谢谢
update 成绩表 set
名次 = row_number() over (order by 分类 desc)
名次 = (select count(*) from 成绩表 where 分数<= a.分数)
from 成绩表 a1楼分类-->分数
;with cte as(
select rank()over(order by 分数 desc)rk,* from 成绩表
)update t set 名次=r.rk from 成绩表 t inner join cte r on t.学生=k.学生
如果
update 成绩表 set
名次 = row_number() over (order by 分类 desc)
--------
这里要求如果当row_number大于指定数据的时候要+1怎么办
也就是说
小张 100 0
小黄 81 0
小李 70 0
小王 60 0
如上面更新就为
小张 100 1
小黄 81 2
小李 70 3
小王 60 4
但现在我要更新为,如果名次大于或等于2的话得加了结果为
小张 100 1
小黄 81 3
小李 70 4
小王 60 5那SQL要怎么写谢谢
insert into 成绩表 select '小张',100, 0
insert into 成绩表 select '小黄',81, 0
insert into 成绩表 select '小李',70, 0
insert into 成绩表 select '小王',60, 0
go
;with cte as(
select rank()over(order by 分数 desc)rk,* from 成绩表
)update t set 名次=r.rk from 成绩表 t inner join cte r on t.姓名=r.姓名
select * from 成绩表
/*
姓名 分数 名次
---------- ----------- -----------
小张 100 1
小黄 81 2
小李 70 3
小王 60 4(4 行受影响)
*/
;with cte as(
select rank()over(order by 分数 desc)rk,* from 成绩表
)update t set 名次=(case when r.rk>1 then r.rk+1 else r.rk end) from 成绩表 t inner join cte r on t.姓名=r.姓名
select * from 成绩表
/*
姓名 分数 名次
---------- ----------- -----------
小张 100 1
小黄 81 3
小李 70 4
小王 60 5(4 行受影响)*/
go
drop table 成绩表
create table #t(name varchar(50),result int, num int)
insert into #t
select '小张' as name,100 as reslut,0 as num union all
select '小王',60,0 union all
select '小李',70,0update a
set num = (select count(1) from #t where result >= a.result)
from #t aselect * from #t order by num
drop table #t
------------------------------------------------------
name result num
-------------------------------------------------- ----------- -----------
小张 100 1
小李 70 2
小王 60 3(3 行受影响)
select * into #tb from (select 学生,分数,名次 = (select count(1) from 成绩表 where 分数<= a.分数))tte t set 名次=(case when b.名次>1 then b.名次+1 else b.名次 end) from 成绩表 a join #t b on a.姓名=b.姓名
--掉了几个字母
select * into #tb from (select 学生,分数,名次 = (select count(1) from 成绩表 where 分数<= a.分数))tupdate a set 名次=(case when b.名次>1 then b.名次+1 else b.名次 end) from 成绩表 a join #t b on a.姓名=b.姓名