而查询学号为321的学生时,效果是:学号    班级   VFO    操作工  C语言  网页
321     网1    85     70      84     97这里应该这样的!

解决方案 »

  1.   

    --查询的存储过程
    create proc p_qry
    @学号 int
    as
    declare @s varchar(8000)
    select top 1 @s='select 学号='''+cast(@学号 as varchar)+''',班级='''+班级+''''
    from score where 学号=@学号
    select @s=@s+',['+科目+']='+cast(成绩 as varchar)
    from score where 学号=@学号
    exec(@s)
    go--调用实现查询
    exec p_qry 821
    exec p_qry 321
    go
      

  2.   

    --测试--测试数据
    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
    @学号 int
    as
    declare @s varchar(8000)
    select top 1 @s='select 学号='''+cast(@学号 as varchar)+''',班级='''+班级+''''
    from score where 学号=@学号
    select @s=@s+',['+科目+']='+cast(成绩 as varchar)
    from score where 学号=@学号
    exec(@s)
    go--调用实现查询
    exec p_qry 821
    exec p_qry 321
    go--删除测试
    drop proc p_qry
    drop table score/*--测试结果学号   班级   C语言         DATABASE    DELPHI      
    ---- ---- ----------- ----------- ----------- 
    821  软1   85          95          80(所影响的行数为 1 行)
    学号   班级   VFO         操作工         C语言         网页          
    ---- ---- ----------- ----------- ----------- ----------- 
    321  网1   85          70          84          97(所影响的行数为 1 行)
    --*/