Sql Update语句

asdf13225 2015-11-26 08:00:16
有一Temp表(按语文成绩降序),一共有3列,一列是语文成绩;一列是排名(1,2,3)(也可以看成行),一列(列名为ID)为空。现在的要求是在ID列加上排名(语文成绩相同时排名相同,如 1,2,2,4,4,4,7),能不能用一条update 语句写出来?,如果不能,可不可以用简短,执行快的语句写出来?
我用的是循环的方法,虽然写出来了,但是很慢。希望各位高手不吝赐教。
...全文
66 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhll2046 2015-11-30
引用 5 楼 asdf13225 的回复:
刚才发现: zhll2046 的数据中没有相同的成绩。 后来添加了数据后,虽然实现了排名,但是中国式排名(如1,2,2,3)不是(1,2,2,4)与要求有出入。
那就把DENSE_RANK 换成RANK
回复
zhll2046 2015-11-27
DECLARE @TEMP TABLE(ROWNO INT IDENTITY,语文成绩 INT,ID INT NULL)
INSERT INTO @TEMP(语文成绩) VALUES(91),(92),(97),(95),(87),(22),(77),(65)

SELECT * FROM @TEMP

;WITH Cte AS
(
SELECT *,DENSE_RANK() OVER(ORDER BY 语文成绩 DESC) RN FROM @TEMP
)
UPDATE Cte SET ID=RN

SELECT * FROM @TEMP
回复
asdf13225 2015-11-27
刚才发现: zhll2046 的数据中没有相同的成绩。 后来添加了数据后,虽然实现了排名,但是中国式排名(如1,2,2,3)不是(1,2,2,4)与要求有出入。
回复
asdf13225 2015-11-27
两位都是对的。论坛里真是藏龙卧虎啊,再次感谢szx1999和zhll2046的热心解答!谢谢!
回复
等不到来世 2015-11-26

--假设pid为主键
update Temp
set id=t.RANK
from (select pid,RANK=RANK() OVER(order by b) from tb) as t
where Temp.pid=t.pid
回复
等不到来世 2015-11-26
表没有主键吗?
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-11-26 08:00
社区公告
暂无公告