--建表
create table 成绩(学号 char(4),姓名 varchar(10),课程代号 char(3),成绩 float,学期 tinyint,专业代号 char(2),班别 char(1),考试类别号 char(4))
create table 课程(课程代号 char(3),课程名称 varchar(10))
--插入测试数据
insert into 成绩 values('9901','A1','aa1',75,1,'01','1','期中')
insert into 成绩 values('9902','A2','aa1',65,1,'01','1','期中')
insert into 成绩 values('9901','A1','aa2',80,1,'01','1','期中')
insert into 成绩 values('9902','A2','aa2',78,1,'01','1','期中')insert into 课程 values('aa1','语文')
insert into 课程 values('aa2','数学')--执行
declare @sql varchar(8000)
set @sql='select 学号,姓名'
select @sql=@sql+',sum(case 课程名称 when '''+课程名称+''' then 成绩 end) ['+课程名称+']'
from (select distinct 课程名称 from 课程) x
select @sql=@sql+',sum(成绩) as 总分 from (select a.*,b.课程名称 from 成绩 a,课程 b where a.课程代号=b.课程代号) x group by 学号,姓名'
exec(@sql)

解决方案 »

  1.   


    楼上太强了
    学习学习
    原来还真不知道sql可以直接拼接循环数据
    受教
    有没有QQ
    交流学习一下
      

  2.   

    select  学号,
    姓名,
    sum(case 课程名称 
    when '数学' 
    then 成绩 
        end) 数学,
    sum(case 课程名称 
    when '语文' 
    then 成绩 
        end) 语文,
    sum(成绩) as 总分 
    from ( select  a.*,
    b.课程名称 
    from  成绩 a,课程 b 
    where a.课程代号=b.课程代号) temp
    group by 学号,姓名