select 姓名,
       sum(case when 科目='数学' then  成绩 else 0 end calse) *,
       sum(case when 科目='语文' then  成绩 else 0 end calse) *, 
       sum(case when 科目='英语' then  成绩 else 0 end calse) *   
from 表名 group by 姓名

解决方案 »

  1.   

    --动态交叉表create table #t (姓名 varchar(100), 科目 varchar(100),成绩 decimal(10,2) )
    goinsert into #t(姓名,科目,成绩)
    select '张三','数学',89.5 union all
    select '张三','语文',80 union all
    select '张三','英语',79 union all
    select '李斯','数学',85 union all
    select '李斯','语文',65 union all
    select '李斯','英语',87select * from #t
    declare @sql varchar(8000)
    set @sql=''
    select @sql=@sql + ',[' + 科目 + ']=sum(case 科目 when ''' + 科目 + ''' then 成绩 else 0 end)'
    from #t
    group by 科目set @sql = 'select 姓名' + @sql + ' from #t group by 姓名'
    select @sqlexec (@sql)
    drop table #t
      

  2.   

    select 姓名,sum(数学) AS 数学,sum(语文) AS 语文,sum(英语) AS 英语
    from 
     (select 姓名,
       case when 科目='数学' then  成绩 else 0 end calse) as 数学,
       case when 科目='语文' then  成绩 else 0 end calse) as 语文, 
       case when 科目='英语' then  成绩 else 0 end calse) as 英语   
     from 表名) 
    group by 姓名
      

  3.   

    select 姓名,
           sum(case 科目 when '数学' then  成绩 else 0 end calse) *,
           sum(case 科目 when '语文' then  成绩 else 0 end calse) *, 
           sum(case 科目 when '英语' then  成绩 else 0 end calse) *   
    from 表名 group by 姓名
      

  4.   

    select 姓名,
           sum(case 科目 when '数学' then  成绩 else 0 end),
           sum(case 科目 when '语文' then  成绩 else 0 end), 
           sum(case 科目 when '英语' then  成绩 else 0 end)    
    from 表名 group by 姓名