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

Oracle SQL需求:根据员工Flag组合生成对应状态

Oracle SQL 需求实现

原始表结构及数据

现有员工表(假设表名为employees)的结构和数据如下:

Emp_Id  flag
------  ----
101     Y
102     N
103     Y
103     N

需求说明

员工的flag存在三种组合情况:

  • 仅含'Y'(如Emp_Id=101)
  • 仅含'N'(如Emp_Id=102)
  • 同时含'Y'和'N'(如Emp_Id=103)

需要编写Oracle SQL语句,得到如下期望结果:

Emp_Id   Status
----------------
101      Auto
102      Manual
103      Partial

解决方案

可以通过分组聚合结合条件判断实现,以下是两种可行写法:

方法一:CASE结合聚合函数

SELECT 
    Emp_Id,
    CASE 
        WHEN COUNT(DISTINCT flag) = 1 AND MAX(flag) = 'Y' THEN 'Auto'
        WHEN COUNT(DISTINCT flag) = 1 AND MAX(flag) = 'N' THEN 'Manual'
        ELSE 'Partial'
    END AS Status
FROM employees
GROUP BY Emp_Id
ORDER BY Emp_Id;

方法二:LISTAGG拼接后判断

SELECT 
    Emp_Id,
    CASE 
        WHEN flag_list = 'Y' THEN 'Auto'
        WHEN flag_list = 'N' THEN 'Manual'
        ELSE 'Partial'
    END AS Status
FROM (
    SELECT 
        Emp_Id,
        LISTAGG(DISTINCT flag, '') WITHIN GROUP (ORDER BY flag) AS flag_list
    FROM employees
    GROUP BY Emp_Id
)
ORDER BY Emp_Id;

思路说明

两种方法均先按Emp_Id分组,对每个员工的flag做聚合处理:

  • 方法一通过统计不同flag的数量和最大值,判断所属类别
  • 方法二通过拼接去重后的flag字符串,直接匹配对应状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:02:10