首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-03-17 
各位高手,请问这题怎么做?麻烦你们了,在线等,急~~~~1、有如下表,其数据如下 学生表:student课程表 :lession

各位高手,请问这题怎么做?麻烦你们了,在线等,急~~~~
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

热点排行