2016-06-29 9 views
0

私はストアドプロシージャを変更する必要があり、WHERE句でどのように日がそれらの日付を操作するのか理解できません。特にEND = 1の場合。私は以前にそれを見たことがない。誰かがCASEステートメントを日付で翻訳する手助けができますか?

CASE WHEN @DateFrom IS NULL THEN 1 ELSE 
         CASE WHEN INV.InvoiceDate > INV.EffectiveDate THEN 
          CASE WHEN dateDiff(d, @DateFrom, INV.InvoiceDate) >= 0 
           AND dateDiff(d, @DateTo, INV.InvoiceDate) <= 0 Then 1 else 0 end 
         ELSE 
          CASE WHEN dateDiff(d, @DateFrom, INV.EffectiveDate) >= 0 
           AND dateDiff(d, @DateTo, INV.EffectiveDate) <= 0 Then 1 else 0 end 
         END 
         END = 1 
+2

それはあなたの 'CASE'を与える条件のちょうどシリーズだ欠けていると思う*表現*このすべての後に1または0の値は、全体' CASE。 .... END'は0または1のいずれかを返すので、 'CASE'式が1の行だけが必要だと言っています。 – Lamak

答えて

0

あなたは、単一のケースに変換するとき、理解しやすいようだ:

CASE 
     WHEN @DateFrom IS NULL THEN 1 
     WHEN @DateFrom IS NOT NULL AND dateDiff(d, @DateFrom, INV.InvoiceDate) >= 0 AND dateDiff(d, @DateTo, INV.InvoiceDate) <= 0 THEN 1 
     ELSE 0 END =1 

あなたはまた、私は第二レベルである時に取得しています何この

CASE 
    WHEN @DateFrom IS NULL THEN 1 ELSE 
         (CASE 
         WHEN dateDiff(d, @DateFrom, INV.InvoiceDate) >= 0 AND dateDiff(d, @DateTo, INV.InvoiceDate) <= 0 THEN 1 ELSE 0 
         END) 
      END) 
      END = 1 

を試みることができますこの場合は奇妙です。 whenelseのケースは同じなので、そこにいる必要はありません。

(CASE 
     WHEN INV.InvoiceDate > INV.EffectiveDate 
     THEN (CASE 
        WHEN dateDiff(d, @DateFrom, INV.InvoiceDate) >= 0 AND dateDiff(d, @DateTo, INV.InvoiceDate) <= 0 THEN 1 ELSE 0 
        END) 
     ELSE (CASE 
       WHEN dateDiff(d, @DateFrom, INV.EffectiveDate) >= 0 AND dateDiff(d, @DateTo, INV.EffectiveDate) <= 0 THEN 1 ELSE 0 
       END) 
+0

ありがとうございますが、バージョンを使用しているときに返されるレコードの数が異なります。そして正直なところ、私はこのCASEステートメントをより多く..類似したものに置き換えることを試みています。私は他の人が同じ数のレコードを返さないことを意味します – Oleg

+0

は答えにいくつかの変更を加えましたが、それがなぜあなたに異なる結果をもたらしたのか分かりません。 – Kostya

0

これはエラーです。私は括弧がどこか

CASE 
     WHEN @DateFrom IS NULL THEN 1 ELSE 
          (CASE 
          WHEN dateDiff(d, @DateFrom, INV.InvoiceDate) >= 0 AND dateDiff(d, @DateTo, INV.InvoiceDate) <= 0 THEN 1 ELSE 0 
          END) 
       END) 
       END = 1 

enter image description here

関連する問題