表a, b, c
//表结构
a: 部门, 费用名称, 费用金额
//表记录
财务部, 工资, 100000
财务部, 交通费, 5000
采购部, 交通费, 1000
采购部, 工资, 20000
求: 将费用按部门统计出来
费用名称 财务部, 采购部, ..., 合计
工资 100000 20000 .... xxxxxxx
交通费 5000 1000 .... xxxxxxx
..............
合计 xxxxx xxxxx .... xxxxxxx
有好的方法吗?
------解决方案--------------------
declare @sql varchar(8000)
set @sql= ' '
select @[email protected]+ ',[ '+部门+ ']=sum(case 部门 when ' ' '+部门+ ' ' ' then 费用金额 else 0 end) '
from 表a group by 部门
set @sql= 'select 费用名称=isnull(费用名称, ' '合计 ' ') '[email protected]+ ',合计=sum(费用金额) from 表a group by 费用名称 with rollup '
exec(@sql)
------解决方案--------------------
create table A (部門 varchar(20),[費用名稱] varchar(20),金額 int)
insert into A
select '財務部 ', '工資 ',100000 union all
select '財務部 ', '交通費 ',5000 union all
select '採購部 ', '工資 ',1000 union all
select '採購部 ', '交通費 ',500
declare @sql varchar(8000)
set @sql= ' '
select @[email protected]+ ',sum(case when [部門]= ' ' '+[部門]+ ' ' ' then 金額 else 0 end) as [ '+[部門]+ '] '
from A group by [部門]
set @sql= 'select [費用名稱] '[email protected]+ ' ,[合計]=(select sum(金額) from A where 費用名稱=t.費用名稱) from A t group by [費用名稱] union all select ' '合計 ' ', '+stuff(@sql,1,1, ' ')+ ' ,sum(金額) from A '
exec(@sql)
drop table A
費用名稱 財務部 採購部 合計
-------------------- ----------- ----------- -----------
工資 100000 1000 101000
交通費 5000 500 5500
合計 105000 1500 106500
------解决方案--------------------
create table T(部门 varchar(20), 费用名称 varchar(20), 费用金额 int)
insert T select '财务部 ', '工资 ', 100000
union all select '财务部 ', '交通费 ', 5000
union all select '采购部 ', '交通费 ', 1000
union all select '采购部 ', '工资 ', 20000
declare @sql varchar(8000)
set @sql= 'select 费用名称, '
select @[email protected]+quotename(部门)+ '=sum(case when 部门= '+quotename(部门, ' ' ' ')+ ' then 费用金额 else 0 end), '
from T
group by 部门
select @[email protected]+ ' 合计=sum(费用金额) from T group by 费用名称 '
exec(@sql)
--result
费用名称 财务部 采购部 合计
-------------------- ----------- ----------- -----------
工资 100000 20000 120000
交通费 5000 1000 6000
------解决方案--------------------
小弟不才,出来帮忙解释一下,说得不对,请扔砖头。~:)