Postgresql用Postgresql的窗口函数搞定"直至本期累计"问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rocklee/article/details/89022459

              今年个税改革从每月工资作为基数扣税改为按年工资作为基数扣税,  需要新开一个表记录每个职员每期工资数据

CREATE TABLE xx_tax_trx (
	fx_payperiod varchar (6) NOT NULL , --工资月份
	fx_staff_id varchar (8) NOT NULL , --职员编号
	fx_tax_base numeric(10, 2) NULL ,  -- 缴税基数
	fx_tax_by_year numeric(10, 2) NULL , --直至本期为止,本年已缴税总额
	fx_tax_period numeric(10, 2) NULL , --本期应缴个税(fx_tax_by_year - 已缴个税总数)
	CONSTRAINT xt_pkey_xx PRIMARY KEY  
	(
		fx_payperiod,
		fx_staff_id
	)  
) 

其中有一个栏位fx_tax_by_year用于存放至于本期为止本年共交了多少个税.

      初始化这个表的时候, 要将往年一年的每个职员的工资放在这里,并计算fx_tax_by_year的值, 可以利用pg的窗口函数完成 :

update xx_tax_trx as a
set fx_tax_by_year= b.sum_tax
from (select fx_staff_id, fx_payperiod,fx_tax_period,
   sum(fx_tax_period) over (partition by fx_staff_id order by fx_payperiod) as sum_tax from xx_tax_trx  
) as b where a.fx_staff_id=b.fx_staff_id and a.fx_payperiod=b.fx_payperiod ;

见下表, 第2条记录的415.06等待上一条记录的276.62+本记录的138.44, 下一个月的第3条记录560.92=276.62+138.44+145.86

猜你喜欢

转载自blog.csdn.net/rocklee/article/details/89022459