PeopleSoft Query Manager多条件CASE语句取邮箱写法咨询
错误原因
你写的语句里THEN Q.EMAIL_ADDR AND 'OTHR'是语法逻辑错误:AND是布尔判断运算符,作用是连接两个判断条件返回真/假值,不能用来声明字段匹配规则,放在THEN子句里只会返回布尔运算结果,拿不到你需要的邮箱地址。
正确实现步骤
- 配置表关联规则
在PeopleSoft Query Manager中给G表和Q表配置左外连接(Left Outer Join),关联键选两表对应的业务唯一匹配字段(比如人员ID、客户ID这类和主体绑定的字段),同时把Q.E_ADDR_TYPE = 'OTHR'的规则直接写在Q表的连接条件里,不要写在全局WHERE筛选中,避免过滤掉G表存在有效邮箱、Q表无对应OTHR邮箱的记录。 - 替换为正确的CASE表达式
由于Q表的类型筛选已经在关联层完成,关联成功后Q.EMAIL_ADDR天然就是E_ADDR_TYPE为'OTHR'的邮箱值,直接使用下面的表达式即可:CASE WHEN G.EMAILID IS NULL THEN Q.EMAIL_ADDR ELSE G.EMAILID END
可选优化
如果需要兜底Q表也无对应OTHR邮箱的空值场景,可以给返回值加空值处理,避免最终结果返回NULL:
CASE WHEN G.EMAILID IS NULL THEN COALESCE(Q.EMAIL_ADDR, '') ELSE G.EMAILID END
注:PeopleSoft Query Manager兼容标准SQL的COALESCE函数,如果你的环境版本不支持,可以替换为PeopleSoft原生空值处理函数
NVL(Q.EMAIL_ADDR, '')
内容的提问来源于stack exchange,提问作者Phlegon_of_Tralles
相关产品推荐
相关产品推荐

