请问这种统计查询语句怎样设计?
表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 车间
/*
车间生产费安全费
二车间32006200
一车间30003200
*/
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)
declare @sql varchar(1000)
set @sql=''
select @sql=@sql+',['+max(费用类别)+']=sum(case 费用类别 when '''+max(费用类别)+''' then 金额 else 0 end)'
from tableA group by 费用类别
exec('select 车间'+@sql+' from tableA group by 车间')
/*
车间生产费安全费
二车间32006200
一车间30003200
*/