读书人

请教这题如何做?麻烦你们了

发布时间: 2013-03-17 13:48:31 作者: rapoo

各位高手,请问这题怎么做?麻烦你们了,在线等,急~~~~
1、有如下表,其数据如下
学生表:student 课程表 :lession
Stu_id name lession_id lession_name
1001 张三 1 语文
1002 李四 2 数学
1003 王五 3 英语
1004 赵六 4 物理
1005 小王 5 化学
1006 小明
分数表:score
Stu_id grade lesion_id
1001 98 1
1002 78 2
1003 90 4
1004 89 5
1005 92 4
1006 94 5
1001 57 4
1004 87 2
1001 98 2
1002 78 3
1003 90 1
1004 89 2


1005 92 3
1006 94 2
1004 87 1

按如下格式统计出数据:
科目 第一名(姓名+分数) 第二名(姓名+分数) 第三名(姓名+分数)

[解决办法]

with tb
as(
select name,c.lession_id,grade,row=row_number()over(partition by c.lession_id order by grade desc) from score a join student b on a.stu_id=b.stu_id join lession c on a.lession_id=c.lession_id
)
select a.lession_name as 科目,b.name+':'+rtrim(b.grade) as 第一名,c.name+':'+rtrim(c.grade) as 第二名,d.name+':'+rtrim(d.grade) as 第三名
from lession a left join tb b on a.lession_id=b.lession_id left join tb c on b.lession_id=c.lession_id and b.row+1=c.row left join tb d on c.lession_id=d.lession_id and c.row+1=d.row
where b.row=1

读书人网 >SQL Server

热点推荐