select 学生编号,sum(成绩*(select 课程常数*周学时 from 课程表 c where c.课程编号=a.课程编号))as 智育分 from 学生选课表 group by 学生编号

解决方案 »

  1.   

    select
         a.学生编号,
         a.学生姓名,
         sum(b.成绩*c.课程常数)/sum(b.周学时*课程常数) as 智育分
    from 
         学生表 a join 
         (选课表 b join 课程表 c on b.课程编号=c.课程编号)
         on a.学生编号=b.学生编号
    group by a.学生编号
      

  2.   

    select tem.学生编号,sum(tem.score)as 智育分 from(select 学生编号,成绩*(select 课程常数*周学时 from 课程表 c where c.课程编号=a.课程编号)as score from 学生选课表)tem group by tem.学生编号
      

  3.   

    declare @student table(学生编号 char(8),学生姓名 char(1) , 性别 char(2),年龄 int)
    insert @student values('01101101','1','男',22)
    insert @student values('01101103','2','女',22)
    insert @student values('01101104','3','男',22)
    declare @class table(课程编号 char(2),  课程名称 char(10)  , 课程性质  char(6) , 课程常数 int,   周学时 int)
    insert @class values('c1','英语','考试课',1.1,3)
    insert @class values('c2','汇编语言','考试课',1.1,5)
    insert @class values('c3','delphi','考查课',0.9,4)
    declare @select table(学生编号 char(8),课程编号 char(2),成绩 int)
    insert @select values('01101101','c1',88)
    insert @select values('01101101','c2',78)
    insert @select values('01101101','c3',89)
    insert @select values('01101103','c1',85)
    insert @select values('01101103','c2',76)
    insert @select values('01101103','c3',71)
    select a.学生编号,
    isnull(
    (sum(case when c.课程性质 = '考试课'then b.成绩 end) *1.1 + sum(case when c.课程性质 = '考查课'then b.成绩 end) * 0.9 ) /
    (sum(case when c.课程性质 = '考试课'then c.周学时 end) *1.1 + sum(case when c.课程性质 = '考查课'then c.周学时 end) * 0.9 ),0) 智育分
    from @student a left join @select b on a.学生编号 = b.学生编号 left join @class c on b.课程编号 = c.课程编号
    group by a.学生编号