怎样在查询结果中加入名次?(按总分输出对应的名次)

昆明信息网 2016-08-08 01:38:28
如题,查询出成绩后,怎样加入一列,显示名次?如,总分最高的名次显示1,第二的显示2.。。。。。。。依此类推;
以下是查询语句:

select xh.snum 学号,xh.sname 姓名,
sum(case kcb.kcmc when '语文' then fs else 0 end)as 语文,
sum(case kcb.kcmc when '数学' then fs else 0 end)as 数学,
sum(case kcb.kcmc when '英语' then fs else 0 end)as 英语,
sum(case kcb.kcmc when '物理' then fs else 0 end)as 物理,
sum(case kcb.kcmc when '化学' then fs else 0 end)as 化学,
sum(case kcb.kcmc when '政治' then fs else 0 end)as 政治,
sum(cast(fs as numeric(5,1))) as 总分 /*将数据类型转换为numeric,长度5,一位小数,因varchar类型不能直接运算,所以需先转换类型; */
from xh
inner join cj on xh.snum=cj.snum
inner join kcb on cj.kcdm=kcb.kcdm
group by xh.snum,xh.sname
...全文
2027 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
昆明信息网 2016-08-08
  • 打赏
  • 举报
回复
谢谢楼上几位的回答,已经解决了,2 3楼的都可以解决问题,现在用了@roy_88 的rank来实现,只是我用用了dense_rank,分少,所以就一人加一 点,多谢了;也再次谢谢roy_88之前帮我解决的查询问题;
中国风 2016-08-08
  • 打赏
  • 举报
回复
RANK显示为并列名次 比如: 分数 名次 100 1 90 2 90 2 80 4
中国风 2016-08-08
  • 打赏
  • 举报
回复
select xh.snum 学号,xh.sname 姓名, sum(case kcb.kcmc when '语文' then fs else 0 end)as 语文, sum(case kcb.kcmc when '数学' then fs else 0 end)as 数学, sum(case kcb.kcmc when '英语' then fs else 0 end)as 英语, sum(case kcb.kcmc when '物理' then fs else 0 end)as 物理, sum(case kcb.kcmc when '化学' then fs else 0 end)as 化学, sum(case kcb.kcmc when '政治' then fs else 0 end)as 政治, sum(cast(fs as numeric(5,1))) as 总分, /*将数据类型转换为numeric,长度5,一位小数,因varchar类型不能直接运算,所以需先转换类型; */ RANK()OVER(ORDER BY sum(cast(fs as numeric(5,1))) DESC) from xh inner join cj on xh.snum=cj.snum inner join kcb on cj.kcdm=kcb.kcdm group by xh.snum,xh.sname
吉普赛的歌 2016-08-08
  • 打赏
  • 举报
回复
;WITH t AS (
	select 
	ROW_NUMBER() OVER (ORDER BY sum(cast(fs as numeric(5,1))) DESC) AS rid
	,xh.snum 学号
	,xh.sname 姓名,
	sum(case kcb.kcmc when '语文' then fs else 0 end)as 语文,
	sum(case kcb.kcmc when '数学' then fs else 0 end)as 数学,
	sum(case kcb.kcmc when '英语' then fs else 0 end)as 英语,
	sum(case kcb.kcmc when '物理' then fs else 0 end)as 物理,
	sum(case kcb.kcmc when '化学' then fs else 0 end)as 化学,
	sum(case kcb.kcmc when '政治' then fs else 0 end)as 政治,
	sum(cast(fs as numeric(5,1))) as 总分      /*将数据类型转换为numeric,长度5,一位小数,因varchar类型不能直接运算,所以需先转换类型; */                   
	from xh 
	inner join cj on xh.snum=cj.snum
	inner join kcb on cj.kcdm=kcb.kcdm
	group by xh.snum,xh.sname
)
SELECT * FROM t ORDER BY rid
http://www.cnblogs.com/xhyang110/archive/2009/10/27/1590448.html
卖水果的net 2016-08-08
  • 打赏
  • 举报
回复

-- 参考这个
select max(object_id) , type ,
row_number() over(order by max(object_id) desc) rn 
from sys.objects group by type 

22,210

社区成员

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

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