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

如何在SQL Server中将多行薪资单合并为单行(含OT处理)

解决方案

可以通过分组聚合的方式实现需求,核心是按员工ID、PSNO、PSDATE分组,用聚合函数提取各字段的有效数据,同时关联加班金额与对应工时:

SELECT
    员工ID,
    PSNO,
    PSDATE,
    MAX(基本工资) AS 基本工资,
    MAX(CASE WHEN 基本工资 IS NOT NULL THEN 工时 ELSE 0 END) AS BASIC_HRS,
    MAX(住房津贴) AS 住房津贴,
    MAX(轮班补贴) AS 轮班补贴,
    MAX(子女补贴) AS 子女补贴,
    ISNULL(MAX(OT1), 0) AS OT1,
    ISNULL(MAX(CASE WHEN OT1 IS NOT NULL THEN 工时 ELSE 0 END), 0) AS OT1_HRS,
    ISNULL(MAX(OT2), 0) AS OT2,
    ISNULL(MAX(CASE WHEN OT2 IS NOT NULL THEN 工时 ELSE 0 END), 0) AS OT2_HRS,
    ISNULL(MAX(OT3), 0) AS OT3,
    ISNULL(MAX(CASE WHEN OT3 IS NOT NULL THEN 工时 ELSE 0 END), 0) AS OT3_HRS,
    SUM(总薪资) AS 总薪资
FROM 你的薪资视图名称
GROUP BY 员工ID, PSNO, PSDATE;

代码说明:

  • GROUP BY 员工ID, PSNO, PSDATE:确保同一员工同一结算周期(PSDATE)的数据合并为单行
  • MAX(字段):同一分组内每个薪资字段仅在一行有非空值,MAX会自动忽略NULL提取有效数据
  • CASE WHEN ... THEN 工时:精准匹配对应薪资项的工时记录,比如基本工资对应的工时、OT1对应的工时
  • ISNULL(..., 0):将不存在的加班项(NULL)转为0,匹配期望输出格式
  • SUM(总薪资):将各行分项薪资求和,得到最终总薪资

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:23:12