首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQS Server 分组汇总,该如何解决

2012-02-09 
SQS Server 分组汇总有数据表Table,有字段Debt(部门)、Duty(职务,值为高工、工程师、助工之一),表中有如下数

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

热点排行