2016-11-25 11 views
0

が動作していない:SQLのCASEテキストフィールドがNULL私はSQLで、次の場合ステートメントを実行しようとしている

CASE 
    WHEN P.Photos_Cloned_From IS NULL 
     THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg' 
     ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg' 
    END AS image_link, 

文の作品を、だけNULLではありませんそれらのレコードのために。 NULLの項目の場合、ステートメントはTHEN条件を戻していません。

提案がありますか?

+0

「THEN条件を返さない」と言うとき、レコードに返される値が正しくないか、完全に欠落していることを意味しますか? –

+1

ご使用のデータベースに質問にタグを付けてください。 –

+0

たぶんnullではなく空の文字列ですか? –

答えて

1

どうぞお試しください。

'http://www.toolboxbarn.com/v/vspfiles/photos/'+ 
    COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg' 
AS image_link, 

ここで合体を使用すると、case文よりも優れています。一部のプラットフォームでは合体を最適化でき、デフォルト値を簡単に作成できます。

+0

私は提案が好きですが、最終的にはNULLと同じ結果にする必要があります。ELSE ... COALESCE(THEN、ELSE)と同じです。 – Matt

+0

@Matt - いいえ2番目のオプションの後にデフォルトがあります。これは両方の問題があると私が信じているOPのコードで "両方のヌル"問題を修正します。 – Hogan

+0

真実はあなたの「デフォルト」を考えていませんでした。これはOPに新しいケースを追加するかもしれませんが、望ましくないかもしれませんが、問題の原因と思われるnullを排除すると言います。 – Matt

1

@ hoganの提案は、コードを保存するのに最適ですが、最終的には新しいデフォルトのケースを導入しないと、ケースステートメントと同じ結果になるはずです。おそらく、ProductCodeNULLである可能性はありますか?

なぜstring + NULL = NULL NULLがSQLで不明であるため、ほとんどのdbプラットフォームは、NULLが集約または連結されたときに値全体を無効にします。あなたのケース式の

Id ProductCode Photos_Cloned_From 
1 1    ClonedFrom 
2 2    Null 
3 NULL   Null 

結果とホーガンの提案は次のようになります:

したがって、次のテストケースを考えてみて

1)ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/ClonedFrom-2T.jpg'

2) 'http://www.toolboxbarn.com/v/vspfiles/photos/2-2T.jpg '

3)WHEN NULL

+0

私の答えをもう一度見てください、私はnull、nullの場合失敗しません。 – Hogan

+0

@Hogan true私はしていました。私はすぐに読みました。新しいケース「default」が含まれていなかった場合は、私の答えを更新しました – Matt

0
CASE WHEN ISNULL(P.Photos_Cloned_From,'') = '' THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg' 
    ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg' 
END AS image_link, 
関連する問題