2017-09-14 8 views
0

日付範囲の同じ行に複数の日付フィールドをフィルタリングしてレコードを選択するSQL文を作成しようとしていますが、指定された開始または終了データの下にある日付フィールド下の表から表示 実際に私はCrystalにSQLコマンドとして書き込む予定であるため、StartDateとEndDate、CountryとCityの値がこのSQL文に提供されます。だから、この瞬間のクリスタルレポートについては気にしないでください。 SQL Select文でこれをどうやって処理するのですか? アイデア???SQLは範囲内の複数の日付フィールドを選択する

パラメータは次のとおり開始日と終了日、国AND/OR市

SQL:

Select * from Table where 
ActualStart in StartDate and EndDate 
Or 
ActualEnd in StartDate and EndDate 
or 
ProjectedStart in StartDate and EndDate 
or ProjectedEnd in StartDate and EndDate 
AND 
County = CountyParam AND (if Not Null(CityParam) then City = CityParam) 

DATA:

WORKID Country CITY  Cost ActualStart ActualEnd ProjectedStart ProjectedEnd 
18112 US  BOSTON 0  NULL   NULL  4/25/2017  NULL 
18181 US  BOSTON 566.76 6/1/2016  6/6/2017 6/6/2017  NULL 
18183 GERMANY STUTTGART 0  NULL   NULL  6/6/2017  NULL 
18184 GERMANY MUNICH  0  NULL  6/6/2017 6/6/2017  NULL 
18185 INDIA HYDERABAD 0  4/1/2015  NULL  7/6/2017  NULL 
18186 CANADA TORONTO 0  NULL   NULL  4/6/2017  NULL 
18187 CANADA TORONTO 0  1/1/2016  NULL  3/6/2017  NULL 
18188 CANADQ CALGARY 0  NULL   NULL  6/6/2017 6/6/2018 
18189 US  BOSTON  0  NULL   NULL  6/6/2017  NULL 
18190 US  CHICAGO 1429.76 NULL  6/7/2017 6/7/2017  NULL 
18191 US  NEWYORK 0  NULL   NULL  8/7/2017  NULL 
+1

はちょうどCOALESCE(開始日を、「を使用し、 'BETWEEN'すなわち' WHERE(開始日と終了日BETWEEN ActualStart)OR(開始日と終了日BETWEEN actualEndは)OR ... ' –

+0

を使用します1900- 01-01 ')をEndDateに、COALESCE(EndDate、' 2100-01-01 ')をEndDateに使用します。 –

+0

ちょっと変わったようです。あなたは長期的なアイテムを除外しようとしていましたか?要求された開始日の前の開始日と、要求された終了日の後の終了日。 – Mic

答えて

0

が、私はこの問題を解決することができた 答えてくれてありがとうあなたの答えから得られたアイデアを使って、構文と関数を結合した後、最終的に日付パラメータ(FromとTo Dat)を持つSQLコマンドをCrystalに追加しましたe)。 国と都市を処理するロジックについては、CrystalでSelectレコードを使用してこれを前のSQLにendステートメントとして追加しました。今はうまくいく。開始日または終了日がNULL可能ならば おかげ

関連する問題