Оператор case для объединения в предложении where - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь использовать оператор CASE внутри предложения WHERE для объединения двух таблиц.Я хочу оценить 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'

1 Ответ

2 голосов
/ 27 сентября 2019

Используйте правильный 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';

Я, как правило, не фанат использования CASE для ON и WHERE предложений.В этом случае, однако, выборочно выбирается только один столбец, поэтому меня это не сильно беспокоит.

...