2017-11-06 16 views
0

私は、以下のケースステートメントでnullを取得し続けている問題(または、isnull関数を使用すると0)が発生しています。私は、あるテーブルのord_due_dateが別のテーブルの2つの日付の間にあるときに、値を返すと言っています。なぜそれがヌル値を返すのかがわかりません。誰か私が間違っていることを教えてもらえますか?SQL Server - 別のテーブルの2つの日付間の日付

+cast(isnull(CASE 
WHEN year(ord_due_date)=cal_yr and ord_due_date<=prd01_end_date 
    THEN '01 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd01_end_date AND ord_due_date<=prd02_end_date 
    THEN '02 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd02_end_date AND ord_due_date<=prd03_end_date 
    THEN '03 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd03_end_date AND ord_due_date<=prd04_end_date 
    THEN '04 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd04_end_date AND ord_due_date<=prd05_end_date 
    THEN '05 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd05_end_date AND ord_due_date<=prd06_end_date 
    THEN '06 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd06_end_date AND ord_due_date<=prd07_end_date 
    THEN '07 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd07_end_date AND ord_due_date<=prd08_end_date 
    THEN '08 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd08_end_date AND ord_due_date<=prd09_end_date 
    THEN '09 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd09_end_date AND ord_due_date<=prd10_end_date 
    THEN '10 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd10_end_date AND ord_due_date<=prd11_end_date 
    THEN '11 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd11_end_date AND ord_due_date<=prd12_end_date 
    THEN '12 '+year(ord_due_date) 
WHEN year(ord_due_date)=cal_yr and ord_due_date>prd12_end_date AND ord_due_date<=prd13_end_date 
    THEN '13 '+year(ord_due_date) 
END,0) as varchar(40))+' '+ 

EDIT:

Ord_Due_Date(日)、それらの列からのデータを追加するには

enter image description here

Cal_Yr(数値)とPrd_End_Date(日)

enter image description here

+1

あなたのロジックは何試合、おそらく間違っていないし、そこですNULLが返されます。 Btw、 'ISNULL'の代わりに' ELSE'を追加するだけです。いくつかのデータとそれらの列のデータ型を表示できますか? – dnoeth

+0

elseは良い提案です、ありがとう。データからわかるように、prd_end_datesの間にある日付があります。ただし、nullは返されますが、 – baskinsr

+0

サンプルデータは、「ord_due_date> prd10_end_date AND ord_due_date <= prd11_end_date」と一致する必要があります。 Btw、あなたのケースは複雑です、 'year(ord_due_date)= cal_yr'と' ord_due_date> prd .._end_date'は結果を変更せずに削除できます。 – dnoeth

答えて

0

私はそれが動作するためにはvarcharとしての私のTHEN文の各部分を連結してキャストしなければなりませんでした。それは私が数値を使用して日付と組み合わせて好きではなかった。

THEN CONCAT(varchar型として(10))、」キャスト('11' VARCHAR(10)のように」、キャスト(年(ord_due_date)))

0

私はあなたが私達に必要であると思う例えば

場合年(ISNULL(ord_due_date、0))= ISNULL(cal_yr、0)とISNULL(ord_due_date、0)<の電子日付フィールドにISNULL直接ではなく、全体のクエリ

= ISNULL(prd01_end_date、0)THEN '01「+年(ISNULL(ord_due_date、0)

関連する問題