select 姓名,
sum(if(科目='英语',分数,0)) as '英语',
sum(if(科目='数学',分数,0)) as '数学',
sum(if(科目='语文',分数,0)) as '语文'
 from t1 group by 姓名;

解决方案 »

  1.   

    mssql:
    create table tb(姓名 varchar(10),科目 varchar(10),分数 int)
    insert into tb select '张三','英语',10
    union all select '张三','数学',90
    union all select '张三','语文',100--动态写法
    declare @sql varchar(8000)
    set @sql='select 姓名'
    select @sql=@sql+',['+科目+']=sum(case 科目 when '''+科目+''' then 分数 else 0 end)' from tb group by 科目
    exec(@sql+' from tb group by 姓名')--静态写法
    select 姓名,
           [英语]=sum(case 科目 when '英语' then 分数 else 0 end),
           [语文]=sum(case 科目 when '语文' then 分数 else 0 end),
           [数学]=sum(case 科目 when '数学' then 分数 else 0 end)
    from tb
    group by 姓名