--查询的存储过程
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'

解决方案 »

  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 行)--*/