drop table 学生成绩表
--建表
create table 学生成绩表
(学号 varchar(10) not null, 姓名 varchar(10) not null,
课程 varchar(20) not null, 成绩 float,标识 varchar(10))
--录入数据
insert into 学生成绩表 values('1','李四','语文',85,'')
insert into 学生成绩表 values('2','王三','数学',0,'缺')
insert into 学生成绩表 values('1','李四','数学',59,'补')
insert into 学生成绩表 values('3','张三','语文',55,'')
insert into 学生成绩表 values('2','王三','语文',35,'作')
insert into 学生成绩表 values('3','张三','数学',89,'')
declare @sql varchar(8000)
set @sql='select 学号,姓名,'
select @sql=@sql+'cast(sum(case 课程 when '''+课程+''' then
成绩 else
0 end) as varchar(10))
+IsNull((select 标识 from 学生成绩表 where 学号=b.学号 and 课程='''+课程+'''),'''') as '
+课程+' ,' from (select Distinct 课程 from 学生成绩表) as a
declare @subjectcount varchar(10)
select @subjectcount=count(Distinct 课程) from 学生成绩表
select @sql=@sql+'(select sum(成绩) from 学生成绩表 where 学号=b.学号) / '+@subjectcount+' as 平均分 ,'
select @sql=@sql+'(select cast(Count(学号)as varchar(10))+''科'' from 学生成绩表 where 成绩<60 and 学号=b.学号) as 不及格科数'
+' from 学生成绩表 as b group by 学号,姓名'
print @sql
select @sql=@sql+' union select ''合计'' as 学号,'''' as 姓名,'
select @sql=@sql+'(Select cast(Count(学号) as varchar(10))+''人'' from 学生成绩表 where 成绩<60 and 课程='''
+ 课程+''') as '+ 课程 +','from (select Distinct 课程 from 学生成绩表) as a
select @sql=@sql+''''' as 平均分,'''' as 不及格科数 order by 平均分 desc'
--print @sql
exec(@sql)