首页 > 解决方案 > 在 where 子句中加入的 case 语句

问题描述

我试图CASE在一个WHERE子句中使用一个语句来连接 2 个表。我想评估POSITION_NBR2,如果它是空白(空)那么我想加入A.POSITION_NBR2 = B.POSITION_NBR否则我想加入A.POSITION_NBR = B.POSITION_NBR,但是我在尝试运行以下命令时遇到语法错误:

UPDATE #WORKTABLE
SET SLT_MEMBER = B.NAME
FROM PS_GHS_FTE_SLT A,
     PS_EMPLOYEES B,
     #WORKTABLE C
WHERE 
  CASE WHEN A.POSITION_NBR2  <> '' THEN A.POSITION_NBR2 = B.POSITION_NBR
       ELSE A.POSITION_NBR = B.POSITION_NBR
       END
  AND A.DEPTID COLLATE Latin1_General_BIN = C.DEPTID COLLATE Latin1_General_BIN
  AND B.EMPL_STATUS = 'A'

标签: sqlsql-server-2014

解决方案


使用正确的JOIN语法和合理的表别名:

UPDATE WT
    SET SLT_MEMBER = E.NAME
FROM PS_GHS_FTE_SLT GFS JOIN
     PS_EMPLOYEES E
     ON E.POSITION_NBR = (CASE WHEN GFS.POSITION_NBR2 <> '' THEN GFS.POSITION_NBR2 ELSE GFS.POSITION_NBR
                          END) JOIN
     #WORKTABLE WT
     ON GFS.DEPTID COLLATE Latin1_General_BIN = WT.DEPTID COLLATE Latin1_General_BIN 
WHERE E.EMPL_STATUS = 'A';

我通常不喜欢使用CASEforONWHERE子句。但是,在这种情况下,它只是选择性地选择一列,所以它并没有给我带来太多困扰。


推荐阅读