您的位置:首页 > 数据库

用SQL计算名次

2016-05-22 23:31 501 查看
几天前在CSDN回答别人的问题: SQL怎样取得指定人的名次 ,现将结果招录下来。

一、测试数据:

select A.*

into #tmp_Mark

from (

select id=1, myname='小明', mypass=123

union

select id=2, myname='小花', mypass=122

union

select id=3, myname='小东', mypass=111

union

select id=4, myname='小牛', mypass=122

) A

二、名次按mypass排列,依次递增,mypass值相同时名次并列,即要求结果为:

idmyname

mypass

OrderNo
1

小明1231
2小花1222
3小牛1222
4小东1113
需要使用临时表生成排序,使用以下语句:

select IDENTITY(int, 1,1) as OrderNo, mypass

into #tmp_Order

from #tmp_Mark group by mypass order by mypass desc

--显示结果

select B.*, A.OrderNo from #tmp_Order A,#tmp_Mark B where A.mypass=B.mypass order by A.OrderNo

--如果只要单独知道小花排序

select OrderNo from #tmp_Order A, #tmp_Mark B where A.mypass=B.mypass and B.myname='小花'

三、名次依mypass排列,mypass值相同名次并列,但计算排名,即:

idmynam

mypass

OrderNo
1

小明1231
2小花1222
3小牛1222
4小东1114
这个稍为简单,无需临时表:

select A.*,myOrder=(select count(*) from #tmp_Mark where mypass>a.mypass)+1

from #tmp_Mark A order by myOrder

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: