sql - 在 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'
解决方案
使用正确的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
forON
和WHERE
子句。但是,在这种情况下,它只是选择性地选择一列,所以它并没有给我带来太多困扰。
推荐阅读
- angular - 角度日期选择器选择周
- java - 我们可以在java中的一个类中有多个静态锁吗
- javascript - 在 Magento-2 中,如何编辑带有值的订单摘要标签并在购物车页面中添加更多标签?
- ffmpeg - FFMPEG 分段无线电流在连接后显示不正确的持续时间
- java - 写一个java方法读取一个json文件,写成toml文件
- php - 传递给 Symfony\Component\VarDumper\Dumper\HtmlDumper::setDumpHeader() 的参数 1 必须是字符串类型,给定 null
- database - TDengine如何检查数据库参数修改是否生效
- .net - 如何更新在.net winforms中有图像的列表视图的子项
- flutter - 在处理视野之外的小部件时如何避免动画运动?
- github - GitHub 有没有办法支持从右到左的文件?