order by排序后如何添加一列自动编号?

elliot 2003-07-17 05:33:43
比如学生成绩order by从高到低排序后,怎么添加一列自动编号,记录排名?
就像下面这样:

id score rank
------ ------------ --------
Mark 98 1
Jerry 93 2
Kate 90 3
......

...全文
403 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxjpost 2003-07-18
  • 打赏
  • 举报
回复
要想實現分數相同名次相同你得寫函數了。
或者用臨時表寫存儲過程用遊標實現,很快的,隻要快你管它用什麼方法實現呢
ronaldor 2003-07-18
  • 打赏
  • 举报
回复
SqlServer2000的话可以用函数
zjcxc 2003-07-17
  • 打赏
  • 举报
回复
如果不考虑资源消耗的问题,一定要视图的话,就用:

select id,score
,(select count(score) from 你的表 where score<=a.score)
from 你的表 a
order by score desc

这个可以解决"分数相同时排名多计1"的问题
zjcxc 2003-07-17
  • 打赏
  • 举报
回复
用自动编号的列也会出现分数相同时排名多计1
的情况啊
zjcxc 2003-07-17
  • 打赏
  • 举报
回复
要做成视图的话,那就得用资源消耗大的方法
elliot 2003-07-17
  • 打赏
  • 举报
回复
谢谢两位!

to tj_dns(愉快的登山者):
这样似乎资源消耗太大,查询时间比较长,而且分数相同时排名多计1

to 97866(weiLuang):
必须into进表,做成视图可能么?
愉快的登山者 2003-07-17
  • 打赏
  • 举报
回复
Select id, score,
(select count(*) from 表名 where score >= A.score) rank from 表名 A Order by Score desc
97866 2003-07-17
  • 打赏
  • 举报
回复
改正:
-----------------------------------------------
Select identity(int,1,1)as OrderID,* Into #tmp01 from 表名 Order by Score

Select * from #tmp01 ---排名表.
97866 2003-07-17
  • 打赏
  • 举报
回复
Select identity(int,1,1)as OrderID,* from 表名 Order by Score

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧