日期:2014-05-18  浏览次数:20512 次

求SQL查询
表a,   b,   c

//表结构
a:   部门,   费用名称,   费用金额

//表记录
      财务部,     工资,         100000
      财务部,   交通费,   5000
      采购部,   交通费,   1000
      采购部,   工资,       20000

求:   将费用按部门统计出来

费用名称     财务部,   采购部,   ...,   合计
工资             100000       20000         ....   xxxxxxx
交通费         5000           1000           ....   xxxxxxx
..............
合计             xxxxx         xxxxx         ....   xxxxxxx

有好的方法吗?
     



------解决方案--------------------

declare @sql varchar(8000)
set @sql= ' '

select @sql=@sql+ ',[ '+部门+ ']=sum(case 部门 when ' ' '+部门+ ' ' ' then 费用金额 else 0 end) '
from 表a group by 部门

set @sql= 'select 费用名称=isnull(费用名称, ' '合计 ' ') '+@sql+ ',合计=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 @sql=@sql+ ',sum(case when [部門]= ' ' '+[部門]+ ' ' ' then 金額 else 0 end) as [ '+[部門]+ '] '
from A group by [部門]

set @sql= 'select [費用名稱] '+@sql+ ' ,[合計]=(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 @sql=@sql+quotename(部门)+ '=sum(case when 部门= '+quotename(部门, ' ' ' ')+ ' then 费用金额 else 0 end), '
from T
group by 部门
select @sql=@sql+ ' 合计=sum(费用金额) from T group by 费用名称 '
exec(@sql)

--result
费用名称 财务部 采购部 合计
-------------------- ----------- ----------- -----------
工资 100000 20000 120000
交通费 5000 1000 6000
------解决方案--------------------
小弟不才,出来帮忙解释一下,说得不对,请扔砖头。~:)