You need to enable JavaScript to run this app. 统计员工上月请假次数并更新到employee表的SQL代码问题求助
优惠活动
大模型
产品
解决方案
定价
更多

统计员工上月请假次数并更新到employee表的SQL代码问题求助

原有代码问题梳理
  • 仅实现了请假数据查询逻辑,未执行employee表更新操作,无法将统计结果写入目标表
  • 使用INNER JOIN关联两张表,上月无请假记录的员工会被过滤,无法覆盖全量员工
  • 日期筛选存在跨年漏洞:若当前为1月,上月为去年12月,仅筛选年份等于当前年的规则会遗漏所有去年12月的请假记录
实现方案

表结构说明

现有employee、leave两张表,leave表包含leave_date字段,表结构如下:
表结构示意图

更新语句(直接执行即可完成统计+更新)

假设employee表中存储上月请假数量的字段为last_month_leaves,可根据实际表结构调整字段名:

UPDATE e
SET e.last_month_leaves = ISNULL(l.leave_count, 0)
FROM employee e
LEFT JOIN (
    SELECT [employee id], COUNT(*) AS leave_count
    FROM leave
    -- 整月区间筛选,规避跨年问题,同时支持命中leave_date索引
    WHERE leave_date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)
      AND leave_date < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
    GROUP BY [employee id]
) l ON e.[employee id] = l.[employee id]

数据核对语句(可先运行验证统计结果是否正确)

SELECT 
    e.[employee id],
    ISNULL(l.leave_count, 0) AS 上月请假次数
FROM employee e
LEFT JOIN (
    SELECT [employee id], COUNT(*) AS leave_count
    FROM leave
    WHERE leave_date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)
      AND leave_date < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
    GROUP BY [employee id]
) l ON e.[employee id] = l.[employee id]
注意事项
  • 若数据库大小写敏感,需保证[employee id]字段名的写法在两张表中完全一致
  • 若leave表存在作废请假记录,可在子查询的WHERE条件中新增对应状态的过滤规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 19:51:02