declare @s varchar(8000)
set @s='select 科目'
select @s=@s+',['+姓名']=sum(case 姓名 when '''+姓名+''' then 分数 else 0 end)'
from tablename group by 姓名
exec(@s+'from tablename group by 科目')

解决方案 »

  1.   

    可是我的科目和   另外的内容不在一个表里面呀, 我分了两个表格,@s 有些看不懂,后面还有个sum 是求和么?
      

  2.   

    --SQL server 2000 要用动态SQL,2005 可以用一个SQL 来实现.
      

  3.   


    create table k(科目 varchar(50),分数 int,姓名 varchar(50))
    insert k select '语文',88,'董兆'
    union all select '数学',95,'董兆'
    union all select '英语',89,'董兆'
    union all select '语文',69,'婵娟'
    union all select '数学',95,'婵娟'
    union all select '英语',89,'婵娟'
    union all select '语文',69,'李慧'
    union all select '数学',95,'李慧'
    union all select '英语',89,'李慧'declare @s varchar(8000)
    set @s='select 科目'
    select @s=@s+',['+姓名+']=sum(case 姓名 when '''+姓名+''' then 分数 else 0 end)'
    from k group by 姓名
    exec(@s+'from k group by 科目')
      

  4.   

    你可以建一个视图
    ,然后使用 lxzm1001(*蓝星之梦*) 的方法。
    因为每一个人在同一个科目只有一个成绩(根据科目分组)所以 sum /max等都是可以的。
      

  5.   

    lxzm1001(*蓝星之梦*)
    的代码不错~
      

  6.   

    在这里不适合用sum,如果数据有点小问题的话,很可能会出现>100分的情况,建议用maxdeclare @s varchar(8000)
    set @s='select 科目'
    select @s=@s+',['+姓名']=max(case 姓名 when '''+姓名+''' then 分数 else 0 end)'
    from tablename group by 姓名
    exec(@s+'from tablename group by 科目')