我遇到以下案例陈述的问题。我想我可以通过两种方式做到,但两种方式都不适合我。我有两列用于派生数据。
基本上标准如下:
当erpol.n_pol为空时,请使用idv.n_pol,否则请使用erpol.n_pol。
如果它们都是空白的话我想加入它 - 使用ks.n_pol
。识别何时使用ks.n_pol
的另一种方法是,dt.n_pol
的前3个字母是“OAC”,我已经尝试了,如您所见。
非常感谢任何帮助!
它现在正常工作(substring
注释掉了)我只需要能够添加“如果它们都是空白的,请使用ks.n_pol”。
,dt.i_pol as "Policy_Number"
, (case
when erpol.n_pol is null then idv.n_pol
/*when substr(dt.i_pol,1,3)= 'OAC' then ks.n_pol*/
else erpol.n_pol end) as "Policy_Name"
,0 as "Division_Number"
,d_dby as "Disability_Date"
,0 as "Months_Since_Disability_Date"
,0 as "First_Payment_Date"
,0 as "Last_Payment_Date"
,0 as "Last_Benefit_Paidto_Date"
,dys as "Days_Since_Last_Paidto"
from dt
答案 0 :(得分:4)
您可以使用COALESCE
例如
COALESCE (erpol.n_pol,idv.n_pol, ks.n_pol)
如果存在所有3为空的危险,则在末尾添加默认值
COALESCE (erpol.n_pol,idv.n_pol, ks.n_pol, 'default')
答案 1 :(得分:1)
鉴于在这个特殊情况下@ podiluska的解决方案方式更好,您的查询失败,因为只要第一个字段为NULL,就会选择第一个选项。
我不确定CASE WHEN
中的执行顺序,但通常最严格的条件是先行,所以:
(CASE WHEN erpol.n_pol IS NULL AND idv.n_pol IS NULL THEN ks.n_pol
WHEN erpol.n_pol IS NULL THEN idv.n_pol
ELSE erpol.n_pol END)
如果您确定这等同于erpol
和idv
NULL
n_pol
,则可以使用“OAC”测试替换第一个WHEN条件
答案 2 :(得分:0)
它现在正常工作(子字符串被注释掉)我只需要能够添加“如果它们都是空白的,则使用ks.n_pol”。
这应该有效:
ISNULL(ISNULL(erpol.n_pol, idv.n_pol), ks.n_pol)