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

SQL CASE表达式编写报错,如何正确格式化实现员工在职离职状态判断

你的代码存在3个核心问题

  • 语法错误:CASE表达式内部不支持写WHERE子句,多分支判断需要通过多个WHEN条件实现
  • 空值判断错误:SQL中不能用<> NULL判断字段非空,必须用IS NOT NULL,NULL和任何值做比较运算的结果都是未知,不会触发条件分支
  • 逻辑不匹配:你需要的逻辑是仅根据DATEOFLEAVING是否为空判断状态,原代码绑定了STATUS字段的判断,和需求不符

正确修改方案

如果你完全按照「DATEOFLEAVING不为空显示LEFT,否则显示ACTIVE」的需求,CASE部分修改为:

,CASE 
    WHEN PEO.DATEOFLEAVING IS NOT NULL THEN 'LEFT'
    ELSE 'ACTIVE'
END AS [STATUS]

如果需要同时保留原有STATUS='A'的判断逻辑,可调整为:

,CASE 
    WHEN PEO.DATEOFLEAVING IS NOT NULL THEN 'LEFT'
    WHEN ISNULL(PEO.STATUS,'') = 'A' THEN 'ACTIVE'
    ELSE 'LEFT'
END AS [STATUS]

完整修改后代码

SELECT DISTINCT  
PEO.PEOPLE_ID AS [PEOPLE_ID]  
,PEO.EMPLOYEECLOCKNO AS [EMPLOYEENUMBER]  
,ISNULL(CONVERT(VARCHAR(50),PEO.DATEOFJOIN,103),'') AS [DATEOFJOIN]  
,CASE 
    WHEN PEO.DATEOFLEAVING IS NOT NULL THEN 'LEFT'
    ELSE 'ACTIVE'
END AS [STATUS]
INTO #BSP_EMPLOYEEDETAILS 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:39:01