http://expert.csdn.net/Expert/topic/1283/1283543.xml?temp=.8352167

解决方案 »

  1.   

    对,就是这个。create table mytable (姓名 char(10),科目 char(10),分数 numeric(6,2))
    insert into mytable values('A','数学',    10)
    insert into mytable values('A','语文',    20)
    insert into mytable values('A','历史',    30)
    insert into mytable values('B','化学',    40)
    insert into mytable values('B','数学',    50)
    insert into mytable values('B','历史',    60)
    insert into mytable values('C','历史',    70)
    insert into mytable values('D','英语',    80)
    insert into mytable values('D','数学',    90)
    insert into mytable values('E','体育',    88.8)
    insert into mytable values('F','政治',    100)
    go
    -------------------------------------------------------------------------
    declare @sql varchar(8000)
    set @sql = 'select 姓名,'select @sql = @sql + 'sum(case 科目 when '''+科目+''' 
                              then 分数 else 0 end) as '''+科目+''','
      from (select distinct 科目 from mytable) as aselect @sql = left(@sql,len(@sql)-1) + ',sum(分数) as 总分 from mytable group by 姓名'exec(@sql)
    go