如何按年度计算员工累计薪资(Cum_Sal)?
补全员工年度累计薪资(Cum_Sal)解决方案
嗨,从你给出的薪资数据来看,核心需求是补全缺失的Cum_Sal列,而且能明显看出累计规则是按自然年度单独计算(2017年1月重新从当月薪资开始累计,而非延续2016年的总额)。下面分两种最常用的场景给你具体解决办法:
一、SQL 解决方案(数据库场景)
如果你的数据存储在数据库表(比如表名为employee_salary),可以用窗口函数快速实现自动累计,不同数据库的语法略有差异,这里给你两种主流版本:
MySQL/MariaDB 版本
SELECT EMPLOYEE, MONTH, YEAR, SALARY, -- 按员工+年度分组,按月份顺序累加薪资 SUM(SALARY) OVER ( PARTITION BY EMPLOYEE, YEAR ORDER BY FIELD(MONTH, 'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC') ) AS Cum_Sal FROM employee_salary;
PostgreSQL 版本
SELECT EMPLOYEE, MONTH, YEAR, SALARY, -- 按员工+年度分组,将月份转成日期后排序累加 SUM(SALARY) OVER ( PARTITION BY EMPLOYEE, YEAR ORDER BY TO_DATE(MONTH, 'MON') ) AS Cum_Sal FROM employee_salary;
核心逻辑说明
PARTITION BY EMPLOYEE, YEAR:确保每个员工的每一年单独累计,不会跨年度叠加总额ORDER BY:按月份的时间顺序排序,保证累计是从年初到年末依次计算SUM(SALARY) OVER(...):自动对分组内的薪资按顺序累加,直接生成完整的Cum_Sal列
二、Excel 解决方案(表格场景)
如果你的数据在Excel中,可以用SUMIFS函数结合绝对引用实现自动累计:
假设数据从A1(EMPLOYEE表头)到E1(Cum_Sal表头)开始,在E2单元格输入公式:
=SUMIFS(D$2:D2, A$2:A2, A2, C$2:C2, C2)
输入完成后下拉填充整个E列,就能自动补全所有缺失的Cum_Sal值。
核心逻辑说明
SUMIFS(D$2:D2, ...):只累加当前行及以上的薪资,实现逐行累计A$2:A2, A2:限定只计算当前员工的记录C$2:C2, C2:限定只计算当前年度的记录
内容的提问来源于stack exchange,提问作者Swadhin Mallik
相关产品推荐
相关产品推荐

