回 帖 发 新 帖 刷新版面

主题:如何在sql中分类排序后加名次


有如下表:

报考学校    报考学院    报考专业    准考证号    分数
A1    B1    C1    D1    65
A1    B1    C2    D2    45
A1    B1    C1    D3    77
A1    B2    C3    D4    89
A1    B2    C3    D5    78
A1    B2    C1    D6    77
A2    B3    C1    D7    71
A2    B3    C4    D8    65
A2    B2    C2    D9    57
A2    B2    C2    D10    92


按报考学校,报考学院,报考专业,分数进行排序结果如下。

排序后如下:
报考学校    报考学院    报考专业    准考证号    分数    名次
A1    B1    C1    D3    77    1
A1    B1    C1    D1    65    2
A1    B1    C2    D2    45    1
A1    B2    C1    D6    77    1
A1    B2    C3    D4    89    1
A1    B2    C3    D5    78    2
A2    B2    C2    D10    92    1
A2    B2    C2    D9    57    2
A2    B3    C1    D7    71    1
A2    B3    C4    D8    65    1

程序如何写啊?

回复列表 (共6个回复)

沙发

select 报考学校,报考学院,报考专业,准考证号,分数,(select count(*) from (select 报考学校,报考学院,报考专业,分数 from 你的表
group by 报考学校,报考学院,报考专业,分数) b where a.分数<=b.分数 and a.报考学校=b.报考学校 and a.报考学院=b.报考学院 and a.报考专业=b.报考专业 ) as 名次
from 你的表 as a
order by 报考学校,报考学院,报考专业,分数 desc

板凳

select 报考学校,报考学院,报考专业,准考证号,分数,(select count(*)+1 from @t b where b.分数>a.分数 and b.报考学校=a.报考学校 and b.报考学院=a.报考学院 and b.报考专业=a.报考专业)as 名次
from 你的表 as a
order by 报考学校,报考学院,报考专业,分数 desc

--这个是改进后的,你试试

3 楼

大哥:这一句是何意思,是否可以详解一下,谢谢!
select count(*)+1 from @t b where b.分数>a.分数 and b.报考学校=a.报考学校 and b.报考学院=a.报考学院 and b.报考专业=a.报考专业

4 楼

@t 就是你的表 , 在这里我是用变量表为例子做的测试
那语句的意思就是找到相同报考学校,相同报考学院,相同报考专业,并且分数大于相同报考条件的分数的个数,+1是最大分数count(*)出来的是0 ,所以需要+1变成第一名,其他的分数也是一样的道理

5 楼

师兄上次你给的那个查询,计算机报不能使用SQL子查询??请问是何意

6 楼


子查询应该是可以使用的,我是在“查询分析器”中调试的,没用封装存储过程,你将代码封装成存储过程就应该可以使用了!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册