有一张表  姓名    科目     成绩
  张三    语文      98
  李四    语文      96
  张三    数学      95 
  李四    数学      92 
  张三    英语      90
  李四    英语      86通过命令生成另外一张表   姓名   语文   数学   英语
   张三    98     95     90
   李四    96     92     86想破头了也没有什么好办法,解决请大家帮忙给看看,不胜感激,谢谢

解决方案 »

  1.   

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

  2.   

    科目不定时:------------------------------------
    -- Author: flystone  
    -- Version:V1.001  
    -- Date:2009-11-15 18:48:45
    -------------------------------------- Test Data: ta
    If object_id('ta') is not null 
        Drop table ta
    Go
    Create table ta(姓名 nvarchar(2),科目 nvarchar(2),成绩 int)
    Go
    Insert into ta
     select '张三','语文',98 union all
     select '李四','语文',96 union all
     select '张三','数学',95 union all
     select '李四','数学',92 union all
     select '张三','英语',90 union all
     select '李四','英语',86 
    Go
    --Start
    declare @s varchar(8000)select @s = isnull(@s+',','')+ 'max(case when 科目 = '''+科目+''' then 成绩 else 0 end) as ['+科目+']'
    from (select distinct 科目 from ta) a
    exec(' select 姓名,'+ @s+' from ta group by 姓名')
    --Result:
    /*姓名   数学          英语          语文          
    ---- ----------- ----------- ----------- 
    李四   92          86          96
    张三   95          90          98*/
    --End