学员分数表
姓名 科目 分数
zhang san 语文 60
lisi 语文 71
wangwu 语文 61
zhaoliu 语文 90
.....
所得结果 姓名
zhang san 语文 第四名
lisi 语文 第二名
wangwu 语文 第三名
zhaoliu 语文 第一名
想破头也想不出来,敬请高人指点,谢谢!
姓名 科目 分数
zhang san 语文 60
lisi 语文 71
wangwu 语文 61
zhaoliu 语文 90
.....
所得结果 姓名
zhang san 语文 第四名
lisi 语文 第二名
wangwu 语文 第三名
zhaoliu 语文 第一名
想破头也想不出来,敬请高人指点,谢谢!
解决方案 »
- [SQLServer 2000 Driver for JDBC]Error establishing socket.
- 关于Reporting Service配置问题
- excel中我向里面输入内容,可是内容超长怎么处理?在线等
- 如何读取image类型字段
- 自己模仿写的sql语句虽然成功了 但是第一个还是不怎么明白exist 的逻辑判断是什么呢
- 新手求助 急!!!100分!
- 比较难的查询,看看
- 有一个关于变量名和字段名之间转换的问题,请问是否有方法实现?
- 如何将SQLSERVER生成的XML文档保存到指定的XML文件中。
- 请教一个很菜的问题回答后马上给分,在SQLSERVER表中插入图片字段使用那条语句,具体如何实现,是不要以前台应用程序实现(最好能用ASP举例)谢了
- 怎么用Update给字段编号?
- 请教一个批量修改字符字段的问题。
有类似的例子说明。
分别有成绩重复和成绩不重复的查询算法。
DECLARE @T TABLE(NAME VARCHAR(50),SUBJECT VARCHAR(20),GRADE INT)
INSERT @T SELECT 'zhang san','语文',60
UNION ALL SELECT 'lisi','语文',71
UNION ALL SELECT 'wangwu','语文',61
UNION ALL SELECT 'zhaoliu','语文',90SELECT
NAME,
SUBJECT,
PM=(SELECT COUNT(1) FROM @T WHERE GRADE>=A.GRADE)
FROM @T A
DECLARE @T TABLE(NAME VARCHAR(50),SUBJECT VARCHAR(20),GRADE INT)
INSERT @T SELECT 'zhang san','语文',60
UNION ALL SELECT 'lisi','语文',71
UNION ALL SELECT 'wangwu','语文',61
UNION ALL SELECT 'zhaoliu','语文',90SELECT
NAME,
SUBJECT,
PM='第'+RTRIM((SELECT COUNT(1) FROM @T WHERE GRADE>=A.GRADE))+'名'
FROM @T A
FROM
(
SELECT 'zhang san'姓名,'语文'课程,'60'成绩
UNION ALL
SELECT 'lisi'姓名,'语文'课程,'71'成绩
UNION ALL
SELECT 'wangwu'姓名,'语文'课程,'61'成绩
UNION ALL
SELECT 'zhaoliu'姓名,'语文'课程,'90'成绩
UNION ALL
SELECT 'youran'姓名,'语文'课程,'60'成绩
)ASELECT * FROM #TB_SCORESELECT 姓名,课程,#TB_SCORE.成绩,'第'+CONVERT(VARCHAR(2),名次)+'名'AS 名次
FROM #TB_SCORE
INNER JOIN
(
SELECT 成绩,名次=(SELECT COUNT(1) FROM(SELECT DISTINCT 成绩 FROM #TB_SCORE)B WHERE B.成绩>=A.成绩)
FROM
(SELECT DISTINCT 成绩 FROM #TB_SCORE)A
)T ON T.成绩 = #TB_SCORE.成绩
ORDER BY 名次
名次=case when (select count(fenshu)from Type where fenshu>a.fenshu)+1=1 then '第一名'
when (select count(fenshu)from Type where fenshu>a.fenshu)+1=2 then '第二名'
when (select count(fenshu)from Type where fenshu>a.fenshu)+1=3 then '第三名'
when (select count(fenshu)from Type where fenshu>a.fenshu)+1=4 then '第四名'
end from Type as a