表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)