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

如何关联表实现员工培训模块完成与未完成情况报表?

生成员工培训模块完成/未完成报表的SQL方案

核心思路

要覆盖所有员工的全部培训模块(含未完成项),关键是先构建「员工-模块」的全量组合,再匹配已完成记录:

  • 用Staff表和Modules表做交叉连接,生成每个员工对应所有模块的基础数据集;
  • 左连接Completions表匹配已完成的记录,未匹配到的即为未完成项;
  • 通过条件判断将未完成项的完成日期设为空、状态设为0。

SQL示例(适配常见表结构)

假设表字段如下:

  • Staff:staff_id(员工ID)、manager_id(主管ID)、staff_name(员工姓名)
  • Modules:module_id(模块ID)、module_name(模块名称)
  • Completions:staff_id、module_id、completion_date(完成日期)、status(完成状态,1=已完成)
SELECT
    s.staff_id,
    s.staff_name,
    m.module_id,
    m.module_name,
    -- 未完成项显示空日期
    c.completion_date,
    -- 未完成项状态设为0,已完成项保留原状态
    CASE 
        WHEN c.status IS NOT NULL THEN c.status 
        ELSE 0 
    END AS completion_status
FROM
    -- 若需筛选特定主管的下属,可在此加WHERE s.manager_id = '目标主管ID'
    Staff s
-- 生成所有员工与所有模块的全组合
CROSS JOIN Modules m
-- 左连接完成表,匹配已完成记录
LEFT JOIN Completions c 
    ON s.staff_id = c.staff_id 
    AND m.module_id = c.module_id
-- 可选:按员工、模块排序,方便查看
ORDER BY s.staff_id, m.module_id;

关键细节说明

  • CROSS JOIN:这是获取未完成项的核心,仅通过Staff和Completions关联只能得到已完成模块,交叉连接能补全所有员工的所有模块条目;
  • LEFT JOIN:确保所有「员工-模块」组合都被保留,已完成的条目会带出Completions表的日期和状态,未完成的则对应字段为NULL;
  • CASE语句:将未完成项的状态统一转换为0,完全匹配需求的报表格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:55:14