SQS Server 分组汇总
有数据表Table,有字段   Debt(部门)、Duty(职务,值为高工、工程师、助工之一),表中有如下数据:  
           Debt(部门)     Duty(职务)  
           设计室1             高工  
           设计室2             助工  
           设计室2             高工  
           设计室1             工程师    
希望首先按Debt分组汇总记录数,同时在每一分组内,再按Duty分组汇总记录数,结果集是:  
           部门               总计       高工         工程师         助工  
           设计室1            2         1            1           0    
          设计室2            2         1            0           1      
SQL语句是怎样的?    
------解决方案----------------------静态SQL,指duty只有这高工、工程师、助工三个值
select debt , count(*) 总计,
 sum(case duty when '高工' then 1 else 0 end) '高工',
 sum(case duty when '工程师' then 1 else 0 end) '工程师',
 sum(case duty when '助工' then 1 else 0 end) '助工'
from table
group by debt
------解决方案--------------------declare @sql varchar(1000)
select @sql=''
select @sql=@sql+','+duty+'=sum(case when duty='''+duty+''' then 1 else 0 end)'
from #t group by duty
exec('select Debt,scount=count(*)'+@sql+' from #t group by Debt')
------解决方案--------------------declare @t Table (Dept varchar(10),Duty varchar(10))
insert into @t select  '设计室1','高工'  
union all select     '设计室2','助工' 
union all select     '设计室2','高工' 
union all select     '设计室1','工程师' 
select b.dept,sum(b.总计) 总计,sum(b.高工) 高工,sum(b.工程师) 工程师,sum(b.助工) 助工 from (select a.dept,(a.高工+a.工程师+a.助工) 总计, a.高工,a.工程师,a.助工  
from ( select dept,case  duty when '高工' then 1 else 0  end 高工,  
case  duty when '工程师' then 1 else 0  end 工程师,
case  duty when '助工' then 1 else 0  end 助工  from @t)a)b group by b.dept