表A:
id     name      class       num
1      张三       a1           10
2      王五       a1           5
3      李六       a2           20
4      张三       a1           14
5      王五       a3           10
6      张三       a2           7
7      李六       a3           5
8      张三       a3           9出输:
id     name      a1      a2      a3   ……
1      张三       24      7       9
2      王五       5       0       10
3      李六       0       20      5注:a1、a2、a3……a10一共有10个到
按name汇总求出各人员的sum(a1)……sum(a10)的值以列的形式显示

解决方案 »

  1.   

    select name
    ,sum(case class when 'a1' then num else 0 end) as 'a1'
    ,sum(case class when 'a2' then num else 0 end) as 'a2'
    ,sum(case class when 'a3' then num else 0 end) as 'a3'
    from test
    group by name
      

  2.   


     select id,name
    ,sum(case class when 'a1' then num else 0 end) 'a1'
    ,sum(case class when 'a2' then num else 0 end) 'a2'
    ,sum(case class when 'a3' then num else 0 end) 'a3'
    from A
    group by id
      

  3.   

    select name
    ,sum(case class when 'a1' then num else 0 end) as 'a1'
    ,sum(case class when 'a2' then num else 0 end) as 'a2'
    ,sum(case class when 'a3' then num else 0 end) as 'a3'
    from tb
    group by name
    --动态  不固定class的declare @sql varchar(8000)
    select @sql=isnull(@sql+',','')+'sum(case when class='''+class+''' then num else 0 end) as ['+class
    +']' from tb group by class
    exec('select name,'+@sql+' from tb group by tb')