基于Pay_Rate列计算时薪的判断逻辑优化问题
问题解决方案
原来的判断逻辑仅通过是否存在小数区分时薪/年薪,未考虑年薪也可能存在小数的场景,因此需要新增数值范围阈值的判断逻辑:
- 正常业务场景下,小时薪资的数值上限远低于最低年薪的数值下限,可先根据公司实际薪资规则确定小时薪的最高合理阈值(示例中我们设置为1000,可根据自身业务调整)
- 只有同时满足「Pay_Rate存在大于0的小数部分」+「Pay_Rate小于设定的小时薪阈值」两个条件时,才判定为小时薪直接取值,其余情况均按年薪除以2080换算时薪
调整后的SQL代码如下:
CASE WHEN (EMP.PAY_RATE - TRUNC(EMP.PAY_RATE)) > 0 AND EMP.PAY_RATE < 1000 THEN EMP.PAY_RATE ELSE EMP.PAY_RATE / 2080 END AS "Hourly_Wage"
适配优化
如果你们业务中存在整数的小时薪场景(比如时薪固定为30、50等整数),还可以简化逻辑,直接只通过数值阈值判断,不需要额外校验小数部分,适配性更强:
CASE WHEN EMP.PAY_RATE < 1000 THEN EMP.PAY_RATE ELSE EMP.PAY_RATE / 2080 END AS "Hourly_Wage"
对应你提供的样例数据,调整后输出如下:
| Employee | Pay_Rate | Hourly_Wage |
|---|---|---|
| 400001 | 10283.52 | 约4.944 |
| 304068 | 120000 | 约57.692 |
| 304069 | 20.25 | 20.25 |
内容的提问来源于stack exchange,提问作者Shaji
相关产品推荐
相关产品推荐

