-4

問題は、良い悪い醜い 3 つの条件があることです。私の目標は、次の条件のいずれかが null の場合は null を 0 に置き換え、それ以外の場合はすべての条件が null の場合は null として表示することです

case when 'Good' is not  null or 'Bad' is not null or 'Ugly' is not null 
     then coalesce(value,0) 
     else value
end result

ここでの問題は、すべてのヌルを 0 にするという条件であっても、これは私が望むものではありません。前もって感謝します

4

3 に答える 3

0

多分あなたはこのようなものが欲しいと思います。詳細がわかりましたら更新します。

私がこのコメントから離れていたら

問題は、同じ製品の良いものがnullで、悪いもので醜いものが0〜100の値である場合、nullを0に置き換えたいということです。同じ製品で3つすべてがnullの場合、それらをnullにします。 0ではない

私はあなたにこのようなものを与えるでしょう

case
    when good is not null then good 
    when good is null and coalesce(bad,-1) between (0 and 100) and coalesce( ugly,-1) between (0 and 100) then 0
    else null
end

3つの列すべてを提供しようとした場合(複数の列があると想定しています)、次のようにすることができます。

select 
    case 
        when good is null and bad is null and ugly is null then null
        when good is null and (bad is not null or ugly is not null) then 0
        else good
    end as 'good column values'
    ,
    case 
        when good is null and bad is null and ugly is null then null
        when bad is null and (good is not null or ugly is not null) then 0
        else bad
    end as 'bad column values'      
    ,
    case 
        when good is null and bad is null and ugly is null then null
        when ugly is null and (good is not null or bad is not null) then 0
        else ugly
    end as 'ugly column values' 
于 2013-03-08T19:36:57.207 に答える
0

現在の式は(疑似コードで)次のように述べています。

IF <something is true> 
   IF value IS NULL
      RETURN 0
    ELSE 
      RETURN value
   ENDIF
ELSE
   RETURN value
ENDIF

それはあなたが望んでいたものですか?

于 2013-03-08T18:22:03.770 に答える
0

あなたのコードは「良い、悪い、または醜いのいずれかがnullでない場合」と言っていますが、質問は「良い、悪い、または醜いのいずれかがnullの場合」と言っています

私があなたのことを正しく理解している場合は、注意点を取り除いてください。

編集:また、実際には「Good」、「Bad」、「Ugly」というリテラル文字列を使用するつもりはなく、列名などを表すことを意図していると思います。

「Good」、「Bad」、「Ugly」は null ではないため、これらの文字列を使用すると、コードが「else」条件に入らないことに注意してください。

編集 2: 列名 (良い、悪い、醜い) を引用符で囲み、実際に評価されるようにします。これが、まだそのエラーが表示される理由です。

于 2013-03-08T18:04:45.607 に答える