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

T-SQL多条件CASE语句实现员工岗位等级分组查询问题

问题解答

报错原因

你执行的SQL报错是因为 GROUP BY 按职位(Designation)分组后,SELECT 列表中的Grade字段既没有包含在GROUP BY子句中,也没有被聚合函数包裹,SQL Server无法确定分组后要返回同职位下的哪一个Grade值,因此抛出无效列错误。

正确T-SQL语句

按照你给出的三条查询规则,以下语句可以得到期望结果:

SELECT 
    Designation,
    CASE
        -- 规则3优先级最高:仅同时存在A、B且无其他Grade时返回A
        WHEN COUNT(DISTINCT Grade) = 2 
             AND SUM(CASE WHEN Grade = 'A' THEN 1 ELSE 0 END) > 0
             AND SUM(CASE WHEN Grade = 'B' THEN 1 ELSE 0 END) > 0
        THEN 'A'
        -- 规则2:仅一个Grade直接返回
        WHEN COUNT(DISTINCT Grade) = 1 THEN MAX(Grade)
        -- 规则1:多个Grade返回MultiGrade
        ELSE 'MultiGrade'
    END AS Grade
FROM #EmployeeData
GROUP BY Designation

结果验证

执行上述语句后,输出和你期望的结果完全一致:

DesignationGrade
ManagerMultiGrade
SeniorTeamLeadA
TeamLeadMultiGrade

逻辑说明

  • 用聚合函数COUNT(DISTINCT Grade)统计每个职位对应的不同等级数量,避免了非分组字段的引用错误
  • 优先判断是否仅存在A、B两个等级,满足则直接返回A
  • 其次判断是否仅存在单个等级,用MAX(Grade)取唯一的等级值返回
  • 其余情况都返回MultiGrade

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:09:03