简体   繁体   English

在 where 子句中加入的 case 语句

[英]Case statement on a join in where clause

I am trying to use a CASE statement inside a WHERE clause for joining 2 tables.我正在尝试在WHERE子句中使用CASE语句来连接 2 个表。 I want to evaluate POSITION_NBR2 , if it is blank (null) then I want to join A.POSITION_NBR2 = B.POSITION_NBR Else I want to join A.POSITION_NBR = B.POSITION_NBR , however I am getting syntax errors while trying to run the following:我想评估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'

Use proper JOIN syntax and reasonable table aliases:使用正确的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';

I'm generally not a fan of using CASE for ON and WHERE clauses.我通常不喜欢将CASE用于ONWHERE子句。 In this case, though, it is only selectively choosing one column, so it doesn't bother me so much.但是,在这种情况下,它只是选择性地选择一列,所以它并没有给我带来太多困扰。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM