基于PTO_FLAG字段排除记录的SQL加班时长计算问题
解决PTO_FLAG=1时排除工时的加班计算问题
核心思路是在计算周累计工时的时候,把PTO_FLAG=1的记录工时替换为0,这样就不会计入累计统计。修改后的SQL如下:
SUM(CASE WHEN PTO_FLAG != 1 THEN HOURS ELSE 0 END) OVER ( PARTITION BY YRWKINDEX, EMPLOYEE_ID ORDER BY WORK_DATE asc ) AS WK_TO_DATE_HOURS, CASE WHEN WK_TO_DATE_HOURS > 40 THEN WK_TO_DATE_HOURS - 40 ELSE 0 END AS WTD_OVERTIME_HOURS, CASE WHEN (WK_TO_DATE_HOURS - 40) < 0 THEN 0 WHEN (WK_TO_DATE_HOURS - 40) < HOURS THEN WK_TO_DATE_HOURS - 40 WHEN (WK_TO_DATE_HOURS - 40) > 0 AND (WK_TO_DATE_HOURS - 40) > HOURS THEN HOURS END AS OVERTIME_HOURS
关键修改说明
- WK_TO_DATE_HOURS计算:通过
CASE WHEN判断,只要PTO_FLAG=1,该日的HOURS就按0计算,彻底排除休假/事假天数的工时累计。 - 后续加班计算:因为周累计工时已经过滤了休假记录,后面的
WTD_OVERTIME_HOURS和OVERTIME_HOURS逻辑不需要额外修改,就能自动基于有效工时计算加班。
内容的提问来源于stack exchange,提问作者donutking22
相关产品推荐
相关产品推荐

