求行转列数句.
科室,   费用类别,   费用 
 语文科,   书本费,   20 
 物理科,   文具费,   30 
 语文科,   文具费,   50 
 语文科,   伙食费,   100 
 物理科,   餐费,         200   
 出来报表如下 
 科室,   文具费,伙食费,餐费,书本费         合计 
 语文科,50            100                              20                     170 
 物理科   30                                 200                                    230   
------解决方案--------------------if object_id( 'pubs..tb ') is not null 
    drop table tb 
 go   
 create table tb(科室 varchar(10), 费用类别 varchar(10), 费用 int) 
 insert into tb(科室, 费用类别, 费用) values( '语文科 ',  '书本费 ', 20) 
 insert into tb(科室, 费用类别, 费用) values( '物理科 ',  '文具费 ', 30) 
 insert into tb(科室, 费用类别, 费用) values( '语文科 ',  '文具费 ', 50) 
 insert into tb(科室, 费用类别, 费用) values( '语文科 ',  '伙食费 ', 100) 
 insert into tb(科室, 费用类别, 费用) values( '物理科 ',  '餐费 ',   200) 
 go 
 declare @sql varchar(8000) 
 set @sql =  'select 科室 ' 
 select @sql = @sql +  ' , sum(case 费用类别 when  ' ' ' + 费用类别 +  ' ' ' then 费用 else 0 end) [ ' + 费用类别 +  '] ' 
 from (select distinct 费用类别 from tb) as a 
 set @sql = @sql +  ' ,sum(费用) 合计 from tb group by 科室 ' 
 exec(@sql)    
 drop table tb 
 /* 
 科室       餐费        伙食费      书本费      文具费      合计           
 ---------- ----------- ----------- ----------- ----------- -----------  
 物理科     200         0           0           30          230 
 语文科     0           100         20          50          170   
 */
------解决方案--------------------create table T(科室 nvarchar(10),费用类别 nvarchar(10),费用 int) 
 insert T select  '语文科 ',  '书本费 ', 20 
 insert T select  '物理科 ',  '文具费 ', 30 
 insert T select  '语文科 ',  '文具费 ', 50 
 insert T select  '语文科 ',  '伙食费 ', 100 
 insert T select  '物理科 ',  '餐费 ',   200   
 select 科室, 
 书本费=sum(case when 费用类别= '书本费 ' then 费用 else 0 end), 
 文具费=sum(case when 费用类别= '文具费 ' then 费用 else 0 end), 
 伙食费=sum(case when 费用类别= '伙食费 ' then 费用 else 0 end), 
 餐费=sum(case when 费用类别= '餐费 ' then 费用 else 0 end), 
 合计=(select sum(费用) from T where 科室=tmp.科室) 
 from T as tmp 
 group by 科室   
 --result 
 科室         书本费         文具费         伙食费         餐费          合计           
 ---------- ----------- ----------- ----------- ----------- -----------  
 物理科        0           30          0           200         230 
 语文科        20          50          100         0           170   
 (2 row(s) affected)
------解决方案--------------------create table t(xh varchar(20),kc varchar(20),cj int) 
 insert t select  '051000333 ', '高等数学 ',55 
 union all select  '051000333 ', '大学语文 ',67 
 union all select  '051000333 ', '经济学基础 ',88 
 union all select  '021000224 ', '高等数学 ',64 
 union all select  '021000224 ', '大学语文 ',32 
 union all select  '021000224 ', '经济学基础 ',75 
 union all select  '041000851 ', '高等数学 ',69 
 union all select  '041000851 ', '大学语文 ',75 
 union all select  '041000851 ', '经济学基础 ',65     
 declare @sql va