0

我对以下案例陈述有疑问。我想我可以通过两种方式做到这一点,但都不适合我。我有两列用于派生数据。

基本上,标准如下:

当 erpol.n_pol 为空时,使用 idv.n_pol,否则使用 erpol.n_pol。

如果它们都是空白使用,我想合并它ks.n_pol。确定何时使用的另一种方法ks.n_pol是前 3 个字母是否dt.n_pol是“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
4

3 回答 3

4

您可以使用COALESCE

例如

COALESCE (erpol.n_pol,idv.n_pol, ks.n_pol)

如果存在所有 3 为空的危险,则在末尾添加一个默认值

COALESCE (erpol.n_pol,idv.n_pol, ks.n_pol, 'default')
于 2012-08-30T13:11:56.813 回答
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.

于 2012-08-30T13:17:06.990 回答
0

它现在按原样工作(已注释掉子字符串)我只需要能够添加“如果它们都是空白的,请使用 ks.n_pol ”。

这应该有效:

ISNULL(ISNULL(erpol.n_pol, idv.n_pol), ks.n_pol)
于 2012-08-30T13:10:56.753 回答