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

怎么从不同的表中汇总?求SQL语句
工资表:
年月 单位 岗位 工资总额 计时工资 计件工资 出差补助 物价津贴
--------------------------------------
200702 人事部 管理人员
200702 人事部 办事人员
200702 销售部 管理人员
200702 销售部 办事人员
==========================================================================
奖金表:
年月 工种   人数 节约奖 竞赛奖 其他奖
------------------------------------
200702 管理人员
200702 办事人员
=================================================================
汇总表:
年月|类别 人数|   年初至本月工资总额|本月工资总额|各种津贴|各种奖金|其中节约奖|其中竞赛奖|其中其他奖|本月平均工资|年初至本月平均工资
------------------------------------
200702 全部
200702 管理人员
200702 办事人员


汇总表中的:各种津贴=出差补助+物价津贴   本月工资总额=工资表中的工资总额+奖金表中的节约奖+竞赛奖+其他奖   本月平均工资=本月工资总额/人数
我要根据工资表和奖金表的数据,插入到汇总表中。怎样做呀?如果汇总表中已经有对应年月的数据,则更新。


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

create table 工资表 (
年月 varchar(6),
单位 varchar(20),
岗位 varchar(20),
工资总额 numeric(8,2),
计时工资 numeric(8,2),
计件工资 numeric(8,2),
出差补助 numeric(8,2),
物价津贴 numeric(8,2)
)
GO

create table 奖金表 (
年月 varchar(6),
工种 varchar(20),
人数 numeric(8,0),
节约奖 numeric(8,2),
竞赛奖 numeric(8,2),
其他奖 numeric(8,2)
)
GO

insert into 工资表 values ( '200701 ', '人事部 ', '管理人员 ', 1134, 450, 500, 150, 34)
insert into 工资表 values ( '200701 ', '人事部 ', '办事人员 ', 1134, 450, 500, 150, 34)
insert into 工资表 values ( '200701 ', '销售部 ', '管理人员 ', 1034, 450, 350, 200, 34)
insert into 工资表 values ( '200701 ', '销售部 ', '办事人员 ', 1034, 450, 3500, 200, 34)

insert into 工资表 values ( '200702 ', '人事部 ', '管理人员 ', 1334, 600, 500, 210, 34)
insert into 工资表 values ( '200702 ', '人事部 ', '办事人员 ', 1334, 600, 500, 220, 34)
insert into 工资表 values ( '200702 ', '销售部 ', '管理人员 ', 1434, 600, 500, 330, 34)
insert into 工资表 values ( '200702 ', '销售部 ', '办事人员 ', 1434, 600, 500, 340, 34)

insert into 奖金表 values ( '200701 ', '管理人员 ', 10, 3100, 1100, 4100)
insert into 奖金表 values ( '200701 ', '办事人员 ', 20, 3200, 1200, 4200)

insert into 奖金表 values ( '200702 ', '管理人员 ', 10, 3300, 1300, 4300)
insert into 奖金表 values ( '200702 ', '办事人员 ', 20, 3400, 1400, 4400)


GO


--建立视图
create view 汇总表 as
select 年月, '全部 ' 类别, sum(人数) 人数, sum(年初至本月工资总额) 年初至本月工资总额, sum(本月工资总额) 本月工资总额,
sum(各种津贴) 各种津贴, sum(各种奖金) 各种奖金, sum(其中节约奖) 其中节约奖, sum(其中竞赛奖) 其中竞赛奖,
sum(其中其他奖) 其中其他奖, sum(本月平均工资) 本月平均工资, sum(年初至本月平均工资) 年初至本月平均工资
from (
select a.年月, a.工种 类别, a.人数,
(select sum(工资总额) from 工资表 where 年月 between left(a.年月,4)+01 and a.年月 and a.工种=岗位)+
(select sum(节约奖+竞赛奖+其他奖) from 奖金表 where 年月 between left(a.年月,4)+01 and a.年月 and a.工种=工种) 年初至本月工资总额,
(select sum(工资总额) from 工资表 where 年月 = a.年月 and a.工种=岗位)+a.节约奖+a.竞赛奖+a.其他奖 本月工资总额,
(select sum(出差补助+物价津贴) from 工资表 where 年月 = a.年月 and a.工种=岗位) 各种津贴,
a.节约奖+a.竞赛奖+a.其他奖 各种奖金, a.节约奖 其中节约奖, a.竞赛奖 其中竞赛奖, a.其他奖 其中其他奖,
((select sum(工资总额) from 工资表 where 年月 = a.年月 and a.工种=岗位)+a.节约奖+a.竞赛奖+a.其他奖)/a.人数 本月平均工资,
((select sum(工资总额) from 工资表 where 年月 between left(a.年月,4)+01 and a.年月 and a.工种=岗位)+a.节约奖+a.竞赛奖+a.其他奖)/a.人数 年初至本月平均工资
from 奖金表 a
) b group by 年月
union all
select a.年月, a.工种 类别, a.人数,
(select sum(工资总额) from 工资表 where 年月 between left(a.年月,4)+01 and a.年月 and a.工种=岗位)+