如何使用GROUP BY按员工和日期双分组统计每人每日工时总和
员工工时按人员+日期汇总实现方案
核心问题是GROUP BY的分组维度不全,仅按日期分组只会得到单日全员工时总和,需要同时指定「人员」「日期」两个分组维度,即可得到你要的按人按天的汇总结果。
可用SQL代码
SELECT 姓名, 日期, SUM(工时) AS 当日合计工时 -- 若需要转换为出勤天数,把上面的求和部分替换为 SUM(工时)/8 AS 当日出勤天数 FROM 你的表名 WHERE [CANC_DATE] IS NULL GROUP BY 姓名, 日期
逻辑说明
- 保留你原有过滤已取消记录的条件不变,
GROUP BY后同时跟姓名、日期两个字段,数据库就会以「同一个人员+同一个日期」为最小单位做聚合计算,最终返回的就是你需要的结果:1/1/2000 Jon合计5小时、Bob合计6小时,2/1/2000 Jon合计6小时。 - 针对兼职、加班场景该统计逻辑也不会出现误差,因为是先按人按天统计总工时,再做单位转换。
- 如果你需要做月度统计的话,把日期字段替换为对应数据库的月份提取函数即可,比如MySQL用
DATE_FORMAT(日期, '%Y-%m'),SQL Server用FORMAT(日期, 'yyyy-MM'),GROUP BY后同步替换为姓名、提取后的月份字段即可。
内容的提问来源于stack exchange,提问作者bongio2
相关产品推荐
相关产品推荐

