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

如何修改SQL Server查询:统计每位员工完成的任务总数及总费率

没问题,我来帮你搞定这个SQL统计需求!

解决SQL Server中员工任务统计问题

首先得明确咱们的表结构(你没给出具体表结构,我先按常见业务场景假设两种情况,你可以根据实际表调整):

场景1:任务表直接记录总段数和单段费率

假设咱们有三张核心表:

  • Employees:存储员工基本信息,核心字段EmployeeID(员工ID)、EmployeeName(员工姓名)
  • Jobs:存储任务信息,核心字段JobID(任务ID)、TotalSegments(任务总段数)、RatePerSegment(每段费率)
  • EmployeeJob:记录员工和任务的关联关系,核心字段EmployeeID、JobID(表示该员工参与了这个任务)

对应的SQL查询语句如下:

SELECT
    e.EmployeeID,
    e.EmployeeName,
    -- 统计员工完成的任务总数(去重,确保一个任务只算一次)
    COUNT(DISTINCT j.JobID) AS TotalJobsCompleted,
    -- 计算总费率:每个任务的总段数×单段费率,再累加所有任务的结果
    SUM(j.TotalSegments * j.RatePerSegment) AS TotalRateAmount
FROM
    Employees e
JOIN
    EmployeeJob ej ON e.EmployeeID = ej.EmployeeID
JOIN
    Jobs j ON ej.JobID = j.JobID
GROUP BY
    e.EmployeeID, e.EmployeeName
ORDER BY
    TotalJobsCompleted DESC;

场景2:任务段单独存储(每个段一条记录)

如果任务的每一段都单独存在JobSegments表中(比如JobSegments有JobID、SegmentID、Rate字段),那咱们的SQL就要调整成这样:

SELECT
    e.EmployeeID,
    e.EmployeeName,
    -- 统计任务总数,同样去重任务ID
    COUNT(DISTINCT js.JobID) AS TotalJobsCompleted,
    -- 直接累加所有参与任务的所有段的费率
    SUM(js.Rate) AS TotalRateAmount
FROM
    Employees e
JOIN
    EmployeeJob ej ON e.EmployeeID = ej.EmployeeID
JOIN
    JobSegments js ON ej.JobID = js.JobID
GROUP BY
    e.EmployeeID, e.EmployeeName
ORDER BY
    TotalJobsCompleted DESC;

关键逻辑说明

  • 用COUNT(DISTINCT JobID)确保一个任务不管有多少段,都只算一个任务,完全符合你说的“员工A完成2个任务”的统计逻辑
  • 总费率的计算完全贴合你给出的例子:比如任务1有10段,每段5USD;任务2有20段,每段2USD,总费率就是10*5 + 20*2 = 90USD,两种场景的SQL都会正确计算这个结果
  • 如果你的表结构和假设不一样(比如员工和任务的关联是直接在任务表里,比如Jobs有EmployeeID1、EmployeeID2字段),那只需要调整JOIN逻辑就行,核心的统计函数是不变的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:47:28