请教,如何编程自动计算规定时段人平工资?
每个月产生一张工资表如,e201008,e201101,e201110,e201111等等,
1.发放工资规定是:每个月发工资情况是这样的,如当月20日(含)前入职的,当月底发放工资,当月20日后入职的次月底一同发放工资。
2.计算过去十二个月人平工资或规定时段人平工资规则是:
如,截止于2011年11月,计算过去12个月人平工资时,
a) 2010年11月前入职的,就计算2010年12月至2011年11月工资之和除以12;
b) mimi是2011-03-06入职的,就计算2011年3月至11月的工资之和除以9;
c) tom在2011-02-21入职的,当月不发工资,计算是按2011年3月至11月工资之后除以9。
现在问题是:实际工作中,经常要根据动态的需要,实时计算过去十二个月的人平工资,如2010年8月至2011年7月,或2010年10月至2011年9月,2010年12月至2011年11月,2011年1月至12月;经常是计算跨年度的12个月的、或有时同年度的12个月、或者是某规定时段(如2010年8月至12月)的人平工资,等等。
现请教,如何根据人员的入职日期、根据截止于某月,编程自动计算过去十二个月人平工资或者是规定时段的人平工资?请各位老师赐教,谢谢。
close all
CLEAR
SET SAFETY off
SET CENTURY on
SET date TO ansi
CREATE TABLE zgb (cname c (8),joindate d )
INSERT INTO zgb (cname,joindate)value("hans",{^2010-08-15})
INSERT INTO zgb (cname,joindate)value("tom",{^2011-02-21})
INSERT INTO zgb (cname,joindate)value("mimi",{^2011-03-06})
INSERT INTO zgb (cname,joindate)value("cici",{^2010-10-12})
brow
CREATE table e201009 (cname c(8),salary n(9,2))
insert into e201009 (cname,salary)value ("hans",1250)
CREATE table e201010 (cname c(8),salary n(9,2))
insert into e201010 (cname,salary)value ("hans",1150)
insert into e201010 (cname,salary)value ("cici",910)
CREATE table e201011 (cname c(8),salary n(9,2))
insert into e201011 (cname,salary)value ("hans",1090)
insert into e201011 (cname,salary)value ("cici",1080)
CREATE table e201012 (cname c(8),salary n(9,2))
insert into e201012 (cname,salary)value ("hans",1020)
insert into e201012 (cname,salary)value ("cici",1050)
CREATE table e201101 (cname c(8),salary n(9,2))
insert into e201101 (cname,salary)value ("hans",1080)
insert into e201101 (cname,salary)value ("cici",1040)
CREATE table e201102 (cname c(8),salary n(9,2))
insert into e201102 (cname,salary)value ("hans",1120)
insert into e201102 (cname,salary)value ("cici",1090)
CREATE table e201103 (cname c(8),salary n(9,2))
insert into e201103 (cname,salary)value ("hans",1220)
insert into e201103 (cname,salary)value ("tom",1450)
insert into e201103 (cname,salary)value ("mimi",1050)
insert into e201103 (cname,salary)value ("cici",1160)
CREATE table e201104 (cname c(8),salary n(9,2))
insert into e201104 (cname,salary)value ("hans",1120)
insert into e201104 (cname,salary)value ("tom",1280)
insert into e201104 (cname,salary)value ("mimi",1120)
insert into e201104 (cname,salary)value ("cici",1190)
CREATE table e201105 (cname c(8),salary n(9,2))
insert into e201105 (cname,salary)value ("hans",1020)
insert into e201105 (cname,salary)value ("tom",1210)
insert into e201105 (cname,salary)value ("mimi",1150)
insert into e201105 (cname,salary)value ("cici",1100)
CREATE table e201106 (cname c(8),salary n(9,2))
insert into e201106 (cname,salary)value ("hans",1150)
insert into e201106 (cname,salary)value ("tom",1180)
insert into e201106 (cname,salary)value ("mimi",1200)
insert into e201106 (cname,salary)value ("cici",1300)
CREATE table e201107 (cname c(8),salary n(9,2))
insert into e201107 (cname,salary)value ("hans",1210)
insert into e201107 (cname,salary)value ("tom",1180)
insert into e201107 (cname,salary)value ("mimi",1210)
insert into e201107 (cname,salary)value ("cici",1205)
CREATE table e201108 (cname c(8),salary n(9,2))
insert into e201108 (cname,salary)value ("hans",1150)
insert into e201108 (cname,salary)value ("tom",1180)
insert into e201108 (cname,salary)value ("mimi",1210)
insert into e201108 (cname,salary)value ("cici",1210)
CREATE table e201109 (cname c(8),salary n(9,2))
insert into e201109 (cname,salary)value ("hans",1290)
insert into e201109 (cname,salary)value ("tom",1270)
insert into e201109 (cname,salary)value ("mimi",1250)
insert into e201109 (cname,salary)value ("cici",1240)
CREATE table e201110 (cname c(8),salary n(9,2))
insert into e201110 (cname,salary)value ("hans",1120)
insert into e201110 (cname,salary)value ("tom",1310)
insert into e201110 (cname,salary)value ("mimi",1210)
insert into e201110 (cname,salary)value ("cici",1205)
CREATE table e201111 (cname c(8),salary n(9,2))
insert into e201111 (cname,salary)value ("hans",1320)
insert into e201111 (cname,salary)value ("tom",1310)
insert into e201111 (cname,salary)value ("mimi",1300)
insert into e201111 (cname,salary)value ("cici",1290)
CLOSE ALL
CLEAR
SET SAFETY on
SET CENTURY off
[解决办法]
Select cname,Avg(salary) avg_salary From 合成后工资 Group By cname*-- 如果是指定日期范围Select cname,Avg(salary) avg_salary From 合成后工资 Where 日期范围条件 Group By cname
[解决办法]
代码太多,不想看。给你思路。
你这个这应当设置“日期字段”,工资是按月发放的,应当设置月份,用数值型N(7,2),格式为:2011.12。一条记录对应一个月的工资。然后,求平均工资,也应当是按月份来计算,总不能每天发一次工资吧~~~~~~
剩下的事情你应当简单了。将N条的工资SUM起来除以记录数就OK了。另外,请不要用白痴式的领导口吻来处理数据,摒弃“过去12个月”、“前N个月”这种概念,直接输入区间,如:从“2010.10”至“2011.08”
sele count(*) as lines,sum(应发工资) as gzze from 工资表 where betw(月份,2010.10,2011.08) into curs qgz
平均工资=qgz.gzze/lines
use in qgz
我的异常网推荐解决方案:软件开发者薪资,http://www.myexception.cn/other/1391128.html