首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教这种统计查询语句怎样设计

2013-08-09 
请问这种统计查询语句怎样设计?表A车间费用类别金额一车间生产费2000一车间生产费1000一车间安全费2000一

请问这种统计查询语句怎样设计?
表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
*/

[解决办法]
动态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)


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
*/

热点排行