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

同一表多查询与多求和实现:按经理分组统计员工工时

嘿,我来帮你搞定这个按经理分组统计员工工时的需求!根据你给出的表结构和需求,我整理了一套实用的SQL方案,咱们一步步来看:

需求拆解
  • 按经理(SupervisorName/SupervisorNumber)分组,展示其下属所有员工
  • 对每个员工,按TimeType统计该类型的工时总和
  • 同时计算每个员工对应月度(Period)的总工时
  • 注意:ActualHours是字符串类型,必须先转换为数值类型才能做聚合统计
核心SQL查询语句
SELECT
    -- 经理标识信息
    SupervisorNumber,
    SupervisorName,
    -- 员工信息
    EmployeeName,
    -- 工时类型及对应累计工时
    TimeType,
    SUM(TRY_CAST(ActualHours AS DECIMAL(18,2))) AS TotalHoursByType,
    -- 员工月度总工时(同周期下所有工时类型的总和)
    SUM(SUM(TRY_CAST(ActualHours AS DECIMAL(18,2)))) OVER (PARTITION BY SupervisorNumber, EmployeeName, Period) AS MonthlyTotalHours,
    Period
FROM
    YourTableName -- 替换成你的实际表名
WHERE
    -- 过滤掉无法转换为数值的无效工时数据
    TRY_CAST(ActualHours AS DECIMAL(18,2)) IS NOT NULL
GROUP BY
    SupervisorNumber,
    SupervisorName,
    EmployeeName,
    TimeType,
    Period
ORDER BY
    SupervisorName,
    EmployeeName,
    Period,
    TimeType;
代码细节说明
  • TRY_CAST的使用:因为ActualHours是nvarchar(MAX)类型,用TRY_CAST可以避免因数据格式错误导致整个查询崩溃,转换失败的行会被WHERE条件过滤掉
  • 分组逻辑:按经理编号/姓名、员工姓名、工时类型、统计周期分组,确保每个分组是同一经理下、同一员工、同一周期的同一工时类型数据
  • 窗口函数OVER:不用额外子查询,就能同时算出单工时类型的总和和员工月度总工时,简化查询结构
  • 排序规则:最后按经理、员工、周期、工时类型排序,让结果层级清晰,方便阅读
扩展优化:层级汇总查询

如果需要更全面的层级统计(比如先看经理的总工时,再看下属员工的总工时),可以用ROLLUP实现多维度汇总:

SELECT
    SupervisorNumber,
    SupervisorName,
    EmployeeName,
    TimeType,
    SUM(TRY_CAST(ActualHours AS DECIMAL(18,2))) AS TotalHours,
    Period
FROM
    YourTableName
WHERE
    TRY_CAST(ActualHours AS DECIMAL(18,2)) IS NOT NULL
GROUP BY
    ROLLUP(SupervisorNumber, SupervisorName, EmployeeName, TimeType, Period)
ORDER BY
    SupervisorName,
    EmployeeName,
    Period,
    TimeType;

这个查询会自动生成汇总行,比如经理的所有下属总工时、员工的所有工时类型总工时等,满足多维度查看需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:07:33