本帖最后由 addictwudi 于 2011-05-26 14:54:43 编辑

解决方案 »

  1.   

    create table ta(ID int, ClassType varchar(2),[SUM] int)
    insert ta select 1, 'A', 4
    union all select 1, 'A', 1
    union all select 1, 'B', 2 
    union all select 1, 'B', 1
    union all select 1, 'C', 5 
    union all select 6, 'A', 2 
    union all select 6, 'A', 1 
    union all select 6, 'B', 4 
    union all select 6, 'B', 3 
    union all select 6, 'C', 1
    union all select 6, 'C', 2 
     
    declare @s varchar(4000)
    set @s=''
    select @s=@s+','+quotename(ClassType)+'=sum(case ClassType when '+quotename(ClassType,'''')
          +' then [sum] else 0 end)'
    from ta group by ClassType
    set @s='select id'+@s+' from ta group by id'
    select @s
    exec(@s) 
      

  2.   

    wildwave的通用行列转换
      

  3.   


    SQL> with t as(
      2       select '刘洋' name,'语文' subject,80 grade from dual union all
      3       select '刘洋','语文',85 from dual union all
      4       select '刘洋','语文',86 from dual union all
      5       select '张忠','语文',90 from dual union all
      6       select '张忠','数学',95 from dual union all
      7       select '张忠','英语',99 from dual)
      8  select name,
      9         max(decode(subject,'语文',grade,0)) 语文,
     10         max(decode(subject,'数学',grade,0)) 数学,
     11         max(decode(subject,'英语',grade,0)) 英语
     12  from t
     13  group by name
     14  /
     
    NAME         语文         数学         英语
    ---- ---------- ---------- ----------
    刘洋         86          0          0
    张忠         90         95         99
      

  4.   


    select name,
    max(decode(subject,'语文',grade,0)) 语文,
    max(decode(subject,'数学',grade,0)) 数学,
    max(decode(subject,'英语',grade,0)) 英语
    from tablename
    group by name;