我有一个无法正常工作的 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) ) )
期望的行为是
- 仅返回指定开始日期和结束日期的日期范围内的记录
- 当开始日期为 NULL 且结束日期有日期时,返回 NULL 日期或小于结束日期
- 当开始日期有日期且结束日期为空时,返回 NULL 或大于开始日期
- 当开始日期和结束日期都为 NULL 时,只返回日期为 NULL 的记录
现在我能得到的只是日期范围或所有记录 NULLS 和有效日期。