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

SQL SELECT语句按条件替换Task_Days_Due列值且不覆盖原值

问题根因

之前写的条件逻辑没有加ELSE分支:SQL里CASE表达式匹配不到任何WHEN条件、又没写ELSE规则时,默认返回NULL,这就是非关闭任务的Task_Days_Due被错误置空的原因。
另外要注意:Task_Days_Due是数值类型,和要替换的提示文本类型不兼容,必须把原数值显式转成字符串,否则部分数据库会抛出类型不匹配的错误。

修正后代码

直接把原来占位的Task_Days_Due, ?????替换成对应的条件逻辑即可,完整代码如下:

SELECT
    Report_Run_Date,
    incident_number,
    INC_Reported_Date,
    TASK_id,
    TASK_Assigneee, 
    TASK_Status, -- Staged 1000, Assigned 2000, Pending 3000, Work In Progress 4000, Waiting 5000, Closed 6000, ByPassed 7000
    Task_Status2,
    -- RAG状态列
    CASE
        WHEN Task_Status2 = 'Closed' THEN 'N/A - Task is Closed'
        WHEN Task_Days_Due <= 0  THEN 'Red'
        WHEN Task_Days_Due > 0 AND Task_Days_Due <= 7 THEN 'Amber'
        WHEN Task_Days_Due > 7 THEN 'Green'
        WHEN Task_Days_Due IS NULL THEN 'No Task End Date'
    END AS Red_Amber_Green,
    -- 处理关闭状态下的Task_Days_Due展示
    CASE
        WHEN Task_Status2 = 'Closed' THEN 'N/A - Task is Closed'
        ELSE CAST(Task_Days_Due AS CHAR)
    END AS Task_Days_Due
FROM 替换为你的实际查询表名
注意事项
  • 两处关闭状态的判断统一使用Task_Status2 = 'Closed'规则,和需求完全对齐;如果你的业务逻辑是通过TASK_Status = 6000判定关闭,直接替换对应判断条件即可,二者逻辑等价。
  • 非关闭状态下会走ELSE分支返回原天数的字符串格式值,不会再出现NULL覆盖的问题。
  • 类型转换语法可根据你用的数据库调整:
    • MySQL/OceanBase:保持CAST(Task_Days_Due AS CHAR)即可
    • SQL Server:替换为CAST(Task_Days_Due AS VARCHAR(20))
    • PostgreSQL:可简写为Task_Days_Due::TEXT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:09:18