--建表
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)
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)
楼上太强了
学习学习
原来还真不知道sql可以直接拼接循环数据
受教
有没有QQ
交流学习一下
姓名,
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 学号,姓名