0

正しく動作することができないSQLクエリがあります

クエリの簡略化されたバージョンを次に示します。

select * from Permit 
inner join BMP on Permit.PermitNumber = BMP.PermitNumber
left join BMPInspection as BI on Permit.PermitNumber = BI.PermitNumber and BMP.BMPNumber = BI.BMPNumber

where Permit.PermitNumber = 'S002552' 
AND ( ( @StartDate IS NULL
             AND @EndDate IS NULL )
            OR ( BI.dtActionDate > Dateadd(day, -1, @StartDate)
                 AND BI.dtActionDate < Dateadd(day, 1, @EndDate) )
            OR ( BI.dtActionDate > Dateadd(day, -1, @StartDate)
                 AND @EndDate IS NULL )
            OR ( @StartDate IS NULL
                 AND BI.dtActionDate < Dateadd(day, 1, @EndDate) ) )

望ましい動作は

  1. 開始日と終了日が指定されている日付範囲のレコードのみを返します
  2. 開始日がNULLで、終了日に日付がある場合は、NULL日または終了日未満を返します
  3. 開始日に日付があり、終了日がnullの場合、NULLまたは開始日より大きいを返す
  4. 開始日と終了日の両方がNULLの場合、日付がNULLのレコードのみを返します

今私が得ることができるのは、日付範囲またはすべてのレコードのNULLと有効な日付だけです。

4

1 に答える 1

0

この状態の場合:

開始日と終了日の両方がNULLの場合、日付がNULLのレコードのみを返します

変化する:

( @StartDate IS NULL AND @EndDate IS NULL )

( @StartDate IS NULL AND @EndDate IS NULL AND BI.dtActionDate IS NULL)
于 2012-06-04T16:26:44.890 に答える