create table test(xm varchar(100),km varchar(100),fs int)insert into test 
select '张三','语文', 80 union
select '张三','数学', 90 union
select '张三','物理', 85 union
select '李四','语文', 85 union
select '李四','数学', 92 union
select '李四','物理', 82 union
select '王五','数学', 60 select xm,
max(case when km='语文' then fs else 0 end) 语文,
max(case when km='数学' then fs else 0 end) 数学,
max(case when km='物理' then fs else 0 end) 物理
from test
group by xm

/*
李四 85 92 82
王五 0 60 0
张三 80 90 85
*/
drop table test

解决方案 »

  1.   

    create table test(xm varchar(100),km varchar(100),fs int)insert into test 
    select '张三','语文', 80 union
    select '张三','数学', 90 union
    select '张三','物理', 85 union
    select '李四','语文', 85 union
    select '李四','数学', 92 union
    select '李四','物理', 82 union
    select '王五','数学', 60 select xm,
    max(case when km='语文' then fs else 0 end) 语文,
    max(case when km='数学' then fs else 0 end) 数学,
    max(case when km='物理' then fs else 0 end) 物理,
    sum(fs)合计
    from test
    group by xm

    /*
    李四 85 92 82 259
    王五 0 60 0 60
    张三 80 90 85 255
    */
    drop table test
      

  2.   

    我的表是動態的,是輸入的數據
    declare @sql varchar(4000) 
    set @sql = 'select 姓名' 
    select @sql = @sql + ',sum(case 学科 when '''+学科+''' then 成绩 end) as '+学科 
    from (select distinct 学科 from CJ) as a 
    set @sql = @sql+' from cj group by 姓名' 
    exec(@sql)請在這個基礎上修改