2017-09-21 7 views
-2

CASE文を条件付きで使用する場合、小さな問題に直面しています。基本的にこれは私のコードです:私はそれが何をしたいのか選択がnullの状態を返すケース

SELECT m.codmagazzino as Magazzino, m.integratore, i.nomeintegratore, 
m.scadenza, m.quantita, 
CASE m.scadenza 
when (m.scadenza <= curdate() + interval 1 month) then '50%' 
when (m.scadenza >= curdate() + interval 1 month) AND (m.scadenza <= 
curdate() + interval 2 month) then '30%' 
when (m.scadenza >= curdate() + interval 2 month) AND (m.scadenza <= 
curdate() + interval 3 month) then '10%' 
END AS ScontoSuggerito 

FROM magazzino m INNER JOIN integratori i on m.integratore = 
i.codintegratore 
order by scadenza 
; 

は、有効期限(scadenza)をチェックすることで、すぐに期限が切れる、大きいが示唆割引(ScontoSuggerito)となります。問題は、CASE文の条件に該当する行があるにもかかわらず、nullを返すということです。

     Scadenza 
2 3 Creatina Mono 2017-11-03 12 
2 5 MaxPower  2017-11-07 6 
2 9 ImpactWhey  2017-11-24 11 
2 4 Omega 3   2017-11-30 5 
1 1 IsoWhey   2018-02-17 10 
+0

私のdownvoteではありませんが、少なくとも問題を引き起こしているデータを含める必要があります。どうすればあなたの心を読むことができますか? –

+0

また、間隔の開始点と終了点はすべて重なります。必ずしも問題ではありませんが、これに気づくべきです。 –

+1

構文の問題?大文字小文字の後に 'm.scadenze'を削除しますか? 'case when condition then result1 when condition 2 then result 2 when condition 3 then results 3 end' – xQbert

答えて

1

おそらく構文上の問題:ケースステートメントを使用すると2つのパターンがあります。両方を使用しようとしていたようです。 1つだけ適用することができます。

ドキュメント:https://dev.mysql.com/doc/refman/5.7/en/case.html

一つのパターンは、他のCase when OptionalCompoundCondition(s) then ResultA when ConditionsB then ResultB End

前者は、1つの値に1つの値を比較進む​​

を開始します。後者は化合物条件を可能にする。

SELECT m.codmagazzino as Magazzino 
    , m.integratore 
    , i.nomeintegratore 
    , m.scadenza 
    , m.quantita 
    , CASE when (m.scadenza <= curdate() + interval 1 month) then '50%' 
      when (m.scadenza >= curdate() + interval 1 month) AND (m.scadenza <= curdate() + interval 2 month) then '30%' 
      when (m.scadenza >= curdate() + interval 2 month) AND (m.scadenza <= curdate() + interval 3 month) then '10%' 
     END AS ScontoSuggerito 
FROM magazzino m 
INNER JOIN integratori i 
    on m.integratore = i.codintegratore 
order by scadenza; 
+0

ありがとう! "m.scadenza"の直後のケースは必要ありませんでした。私は将来を考えています。もう一度仲間に感謝します – user5753059

+0

それはどのパターンを使用しているかによって異なります。 1つの値を1つの値と単純に比較している場合は、 'A'、次に 'B'が終わったときに大文字フィールドを使用できます。ただし、COMPOUND条件があり、代わりに 'CASE WHEN'アプローチを使用しなければなりません。正直言って、私はいつもまっすぐな平等チェックが必要ないように見えるので、私はいつもこのケースを使います。 – xQbert

関連する問題