0

次のcaseステートメントで問題が発生しています。私はそれを2つの方法で行うことができると思いますが、どちらも私のために働いていません。データを導出するために使用している2つの列があります。

基本的に基準は次のとおりです。

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つすべてがnullになる危険がある場合は、最後にデフォルトを追加します

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最初の WHEN 条件を「OAC」テストに置き換える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 に答える