--查询的存储过程
create proc p_qry
@班级 varchar(10)
as
declare @s varchar(8000)
set @s=''
select @s=@s+',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from score where 班级=@班级
group by 科目
exec('select 学号,班级'+@s+' from score where 班级='''+@班级+''' group by 学号,班级')
go--调用实现查询
exec p_qry '软1'
create proc p_qry
@班级 varchar(10)
as
declare @s varchar(8000)
set @s=''
select @s=@s+',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from score where 班级=@班级
group by 科目
exec('select 学号,班级'+@s+' from score where 班级='''+@班级+''' group by 学号,班级')
go--调用实现查询
exec p_qry '软1'
--测试--测试数据
create table score(学号 int,班级 varchar(10),科目 varchar(10),成绩 int)
insert score select 821,'软1','C语言', 85
union all select 821,'软1','DATABASE',95
union all select 821,'软1','DELPHI', 80
union all select 321,'网1','VFO', 85
union all select 321,'网1','操作工', 70
union all select 321,'网1','C语言', 84
union all select 321,'网1','网页', 97
go--查询的存储过程
create proc p_qry
@班级 varchar(10)
as
declare @s varchar(8000)
set @s=''
select @s=@s+',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from score where 班级=@班级
group by 科目
exec('select 学号,班级'+@s+' from score where 班级='''+@班级+''' group by 学号,班级')
go--调用实现查询
exec p_qry '软1'
go--删除测试
drop proc p_qry
drop table score/*--测试结果学号 班级 C语言 DATABASE DELPHI
----------- ---------- ----------- ----------- -----------
821 软1 85 95 80(所影响的行数为 1 行)--*/