关于加入 where 子句的案例陈述
Case statement on a join in where clause
我正在尝试在 WHERE
子句中使用 CASE
语句来连接 2 个表。我想评估 POSITION_NBR2
,如果它是空白(空),那么我想加入 A.POSITION_NBR2 = B.POSITION_NBR
否则我想加入 A.POSITION_NBR = B.POSITION_NBR
,但是我在尝试 [=18 时遇到语法错误=] 以下:
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'
使用正确的 JOIN
语法和合理的 table 别名:
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
子句。不过,在这种情况下,它只是有选择地选择一列,所以我不太在意。
我正在尝试在 WHERE
子句中使用 CASE
语句来连接 2 个表。我想评估 POSITION_NBR2
,如果它是空白(空),那么我想加入 A.POSITION_NBR2 = B.POSITION_NBR
否则我想加入 A.POSITION_NBR = B.POSITION_NBR
,但是我在尝试 [=18 时遇到语法错误=] 以下:
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'
使用正确的 JOIN
语法和合理的 table 别名:
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
子句。不过,在这种情况下,它只是有选择地选择一列,所以我不太在意。