日期:2014-05-17  浏览次数:20622 次

请问这种统计查询语句怎样设计?
表A

车间   费用类别  金额
一车间  生产费  2000
一车间  生产费  1000
一车间  安全费  2000
一车间  安全费  1200
二车间  生产费  2200
二车间  生产费  1000
二车间  安全费  5000
二车间  安全费  1200

查询生成下表
车间    生产费  安全费
一车间  3000    3200
二车间  3200    6200

不知道不用中间表能不能实现这种查询功能?

------解决方案--------------------
SELECT * FROM
(
SELECT 车间, 费用类别, 金额=SUM(金额)
FROM TB
GROUP BY 车间, 费用类别
) t
PIVOT
(
MAX(金额) FOR 费用类别 IN([生产费], [安全费])
) m

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

create table tableA (车间 nvarchar(10),费用类别 nvarchar(10),金额 int)
insert into tableA values ('一车间','生产费',2000)
insert into tableA values ('一车间','生产费',1000)
insert into tableA values ('一车间','安全费',2000)
insert into tableA values ('一车间','安全费',1200)
insert into tableA values ('二车间','生产费',2200)
insert into tableA values ('二车间','生产费',1000)
insert into tableA values ('二车间','安全费',5000)
insert into tableA values ('二车间','安全费',1200)
select 车间,
生产费=SUM(case when 费用类别='生产费' then 金额 else 0 end),
安全费=SUM(case when 费用类别='安全费' then 金额 else 0 end)
from tableA 
group by 车间
/*
车间 生产费 安全费
二车间 3200 6200
一车间 3000 3200
*/

------解决方案--------------------
动态sql写法:
create table tableA (车间 nvarchar(10),费用类别 nvarchar(10),金额 int)
insert into tableA values ('一车间','生产费',2000)
insert into tableA values ('一车间','生产费',1000)
insert into tableA values ('一车间','安全费',2000)
insert into tableA values ('一车间','安全费',1200)