You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库对比两表校验员工薪资发放差异SQL查询方法

Oracle 员工薪资比对查询实现

涉及表结构

  • 员工标准薪资表:以ID为主键,存储员工基础标准薪资,字段包含ID(员工唯一标识)、Name(员工姓名)、Salary(标准月薪,单位:美元)
  • 实际发薪流水表:存储支付系统同步的实际发薪记录,字段包含ID(关联员工ID)、Date(发薪日期)、Salary(实际发放金额,单位:美元)

实现效果

  • 可精准检索每一笔实际发放与标准薪资不符的明细记录,覆盖少发、多发两类异常
  • 支持按员工维度统计任职周期内薪资异常的月份总数、累计薪资差额

具体SQL代码

异常发薪明细查询

用于定位每一笔异常发薪的具体月份、差额,比如ID为1的员工某月仅发放300的场景,可直接返回对应记录:

SELECT
    s.ID emp_id,
    s.Name emp_name,
    TRUNC(p.Date, 'MONTH') pay_month,
    s.Salary std_monthly_salary,
    p.Salary actual_paid_salary,
    p.Salary - s.Salary diff_amount
FROM emp_salary_std s
INNER JOIN emp_salary_paid p 
    ON s.ID = p.ID
WHERE p.Salary <> s.Salary;

返回字段中diff_amount为差额,单位美元:值为负代表少发,值为正代表多发。

员工维度异常统计

对应优先统计需求,返回每位员工的异常月份总数、累计差额:

SELECT
    s.ID emp_id,
    s.Name emp_name,
    COUNT(DISTINCT TRUNC(p.Date, 'MONTH')) abnormal_pay_month_count,
    SUM(p.Salary - s.Salary) total_diff_amount
FROM emp_salary_std s
INNER JOIN emp_salary_paid p 
    ON s.ID = p.ID
WHERE p.Salary <> s.Salary
GROUP BY s.ID, s.Name;

使用注意事项

  • SQL中emp_salary_std、emp_salary_paid为示例表名,请替换为实际业务环境的真实表名
  • 若需要覆盖员工无标准薪资、无发薪记录的边缘校验场景,可将INNER JOIN替换为LEFT JOIN或FULL JOIN,补充对应空值处理逻辑即可
  • 月份统计通过TRUNC(日期, 'MONTH')将日期归一到当月维度,可避免同一月多次发薪导致的异常月份重复计数
  • 差额计算未使用绝对值,直接通过正负值区分少发、多发场景,无需额外逻辑判断

内容的提问来源于stack exchange,提问作者Fahad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:03:20