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

如何编写Case语句实现按员工仅展示PCT=100对应Flag='Y'的单行数据

解决方案

核心思路是通过WHERE子句添加过滤逻辑,区分两类员工的数据展示规则:

方法一:直接在WHERE中判断(高效简洁)

SELECT 
    -- 保留你原查询中的其他字段
    CASE WHEN PCT = 100 THEN 'Y' ELSE 'N' END AS Utility_PCT
FROM 
    -- 你的多表连接语句(例如:table1 JOIN table2 ON table1.id = table2.id)
WHERE 
    -- 规则1:非Chris、John的员工,保留所有行
    employee_name NOT IN ('Chris', 'John')
    -- 规则2:Chris、John仅保留PCT=100(即Utility_PCT='Y')的行
    OR (employee_name IN ('Chris', 'John') AND PCT = 100)

方法二:用CTE/子查询先计算Utility_PCT再过滤(可读性更强)

如果你的Case逻辑复杂,或者需要多次使用Utility_PCT字段,可以先将查询结果存入临时数据集再过滤:

WITH temp_employee_data AS (
    SELECT 
        -- 原查询的所有字段
        employee_name,
        PCT,
        CASE WHEN PCT = 100 THEN 'Y' ELSE 'N' END AS Utility_PCT
    FROM 
        -- 你的多表连接语句
)
SELECT *
FROM temp_employee_data
WHERE 
    employee_name NOT IN ('Chris', 'John')
    OR (employee_name IN ('Chris', 'John') AND Utility_PCT = 'Y')

说明

  • 方法一中直接用PCT = 100代替Utility_PCT = 'Y',因为两者逻辑完全等价,避免重复计算Case表达式,性能更好。
  • 如果员工姓名存在大小写差异,可以用UPPER(employee_name) IN ('CHRIS', 'JOHN')来兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:35:24