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
相关产品推荐
相关产品推荐

