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

SQL WHERE子句冲突:如何实现全员工指定月度考勤报表展示

解决方案

要显示所有员工的月度考勤数据(包括当月无考勤记录的员工),核心是从员工表出发做左连接,并将日期筛选条件放在连接条件中而非WHERE子句,避免过滤掉无考勤的员工记录。

调整后的SQL语句

SELECT
    e.employee_id AS id,
    e.name,
    GROUP_CONCAT(mr.1) AS '1',
    GROUP_CONCAT(mr.2) AS '2',
    GROUP_CONCAT(mr.3) AS '3',
    GROUP_CONCAT(mr.4) AS '4',
    GROUP_CONCAT(mr.5) AS '5',
    GROUP_CONCAT(mr.6) AS '6',
    GROUP_CONCAT(mr.7) AS '7'
FROM employee AS e
LEFT JOIN monthly_report AS mr
    ON e.employee_id = mr.employee_id
    AND MONTH(mr.date_time) = '6' 
    AND YEAR(mr.date_time) = '2023'
GROUP BY e.employee_id, e.name

关键说明

  1. 以员工表为主表:从employee表发起查询,确保所有员工都会被纳入结果集,无论是否有当月考勤记录。
  2. 日期条件移至ON子句:若将日期筛选放在WHERE子句中,会自动过滤掉mr.date_time为NULL的记录(即无6月考勤的员工);放在ON子句中,只会影响左连接匹配的考勤数据,不会剔除主表的员工记录。
  3. GROUP BY包含非聚合字段:多数SQL模式要求GROUP BY包含所有未使用聚合函数的SELECT字段,避免语法错误或结果异常。
  4. 空值自定义显示(可选):如果希望无考勤的日期列显示特定文本(比如“未打卡”),可以用IFNULL(GROUP_CONCAT(mr.1), '未打卡')替换原有的GROUP_CONCAT(mr.1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:23:19