select xuehao,Xingming
   ,sum(case when kemu='数学' then fenshu else 0 end) shuxue
   ,sum(case when kemu='语文' then fenshu else 0 end) yuwen
   ,sum(case when kemu='英语' then fenshu else 0 end) yingyu
   ....
from table group by xuehao,Xingming

解决方案 »

  1.   

    create table 你的表(姓名 varchar(100),学历 varchar(100),部门 int)
    insert 你的表 values('n1','aa',11)
    insert 你的表 values('n2','bb',1)
    insert 你的表 values('n3','aa',45)
    insert 你的表 values('n4','cc',81)
    insert 你的表 values('n5','a',11)
    insert 你的表 values('n6','aay',561)
    insert 你的表 values('n7','a',14)declare @sql varchar(8000)
    set @sql = 'select 部门'
    select @sql = @sql + ',sum(case 学历 when '''+学历+''' then 1 else 0 end) ['+学历+'的人数]'
      from (select distinct 学历 from 你的表) aselect @sql =@sql+' from 你的表 group by 部门'exec(@sql)drop table 你的表
      

  2.   

    select xuehao,Xingming
       ,sum(case when kemu='数学' then fenshu else 0 end) shuxue
       ,sum(case when kemu='语文' then fenshu else 0 end) yuwen
       ,sum(case when kemu='英语' then fenshu else 0 end) yingyu
       ....
    from table group by xuehao,Xingming---------------------
    科目不确定时
    参考:
    create table #(a varchar(100),b int)
    insert # values('aa',11)
    insert # values('bb',1)
    insert # values('aa',45)
    insert # values('cc',81)
    insert # values('a',11)
    insert # values('aay',561)
    insert # values('a',14)declare @sql varchar(8000)
    set @sql = 'select '
    select @sql = @sql + 'sum(case a when '''+a+''' 
                              then b else 0 end) '+a+'的数量,'
      from (select distinct a from #) as aselect @sql = left(@sql,len(@sql)-1) + ' from #'exec(@sql)drop table #
      

  3.   

    create table 你的表(姓名 varchar(100),科目 varchar(100),成绩 int)
    insert 你的表 values('n1','aa',11)
    insert 你的表 values('n2','bb',1)
    insert 你的表 values('n3','aa',45)
    insert 你的表 values('n4','cc',81)
    insert 你的表 values('n5','a',11)
    insert 你的表 values('n6','aay',561)
    insert 你的表 values('n7','a',14)declare @sql varchar(8000)
    set @sql = 'select 姓名'
    select @sql = @sql + ',sum(case 科目 when '''+科目+''' then 成绩 else 0 end) ['+科目+']'
      from (select distinct 科目 from 你的表) aselect @sql =@sql+' from 你的表 group by 姓名'exec(@sql)drop table 你的表
      

  4.   

    declare @sql varchar(8000)
    set @sql = 'select xuehao,'select @sql = @sql + 'sum(case kemu when '''+kemu+''' 
                              then fenshu else 0 end) as ['+kemu+'],'
      from (select distinct kemu from 表) aselect @sql = left(@sql,len(@sql)-1) + ' from 表 group by xuehao'exec(@sql)