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

按INTRAWORKNO筛选适配度最高员工的SQL查询需求

解决方案

要实现需求,核心逻辑是用员工能处理的排班编号总数作为适配度,筛选每个排班编号下适配度最高的员工。以下是两种可行的查询方案:

方案一:基于CTE关联筛选

先统计每个员工的适配度,再计算每个排班编号的最高适配度,最后关联筛选符合条件的员工:

WITH EmployeeCapability AS (
    -- 统计每个员工能处理的INTRAWORKNO总数(适配度)
    SELECT 
        employee, 
        COUNT(INTRAWORKNO) AS CNTINTRAWORKNO
    FROM @persqualintrawork 
    GROUP BY employee
),
IntraWorkMaxCapability AS (
    -- 计算每个INTRAWORKNO对应的最高适配度
    SELECT 
        p.INTRAWORKNO,
        MAX(e.CNTINTRAWORKNO) AS MaxCapability
    FROM @persqualintrawork p
    JOIN EmployeeCapability e ON p.employee = e.employee
    GROUP BY p.INTRAWORKNO
)
-- 筛选每个INTRAWORKNO中适配度等于最高值的员工
SELECT 
    p.INTRAWORKNO,
    p.employee
FROM @persqualintrawork p
JOIN EmployeeCapability e ON p.employee = e.employee
JOIN IntraWorkMaxCapability m ON p.INTRAWORKNO = m.INTRAWORKNO
WHERE e.CNTINTRAWORKNO = m.MaxCapability
ORDER BY p.INTRAWORKNO, p.employee;

方案二:使用窗口函数简化查询

通过RANK()窗口函数直接为每个排班编号下的员工按适配度排名,取排名第一的员工:

WITH EmployeeCapability AS (
    -- 统计每个员工的适配度
    SELECT 
        employee, 
        COUNT(INTRAWORKNO) AS CNTINTRAWORKNO
    FROM @persqualintrawork 
    GROUP BY employee
),
RankedEmployees AS (
    -- 为每个INTRAWORKNO下的员工按适配度降序排名
    SELECT 
        p.INTRAWORKNO,
        p.employee,
        RANK() OVER (PARTITION BY p.INTRAWORKNO ORDER BY e.CNTINTRAWORKNO DESC) AS Rank
    FROM @persqualintrawork p
    JOIN EmployeeCapability e ON p.employee = e.employee
)
-- 取排名第一的员工(适配度最高)
SELECT INTRAWORKNO, employee
FROM RankedEmployees
WHERE Rank = 1
ORDER BY INTRAWORKNO, employee;

结果验证

两种方案都会得到符合需求的结果:

  • INTRAWORKNO 0:保留员工1、2(适配度均为1,无更优替代)
  • INTRAWORKNO 1:保留员工40、45(适配度为3)
  • INTRAWORKNO 2:仅保留员工40、45(适配度3,高于50、55的适配度2)
  • INTRAWORKNO 3:仅保留员工40、45(同INTRAWORKNO 2逻辑)

内容的提问来源于stack exchange,提问作者Lukas Fürst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:18:22