案例语句标准不起作用SQL

时间:2012-08-30 13:04:57

标签: sql

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

基本上标准如下:

  

当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

3 个答案:

答案 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)

如果您确定这等同于erpolidv NULL n_pol,则可以使用“OAC”测试替换第一个WHEN条件

答案 2 :(得分:0)

  

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

这应该有效:

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