Tsql Where子句问题中的T-SQL Case语句

Tsql Where子句问题中的T-SQL Case语句,tsql,case,where,Tsql,Case,Where,我想让WHERE条款起作用 当@Status为2时,则查找UnitBookedDate在开始日期和结束日期之间的位置 当@Status为4时,查找InstallDate在开始日期和结束日期之间的位置 当@Status为null时,查找UnitBookedDate或InstallDate在开始日期和结束日期之间的位置 我在想也许这个案子的陈述不能满足我的需要 WHERE TMFT.IsUnit = 1 AND I.InstallTypeId < 3 AND CASE WHEN @S

我想让WHERE条款起作用

  • 当@Status为2时,则查找UnitBookedDate在开始日期和结束日期之间的位置

  • 当@Status为4时,查找InstallDate在开始日期和结束日期之间的位置

  • 当@Status为null时,查找UnitBookedDateInstallDate在开始日期和结束日期之间的位置

我在想也许这个案子的陈述不能满足我的需要

WHERE
TMFT.IsUnit = 1 AND
I.InstallTypeId < 3 AND
CASE
   WHEN @Status = 2 THEN I.UnitBookedDate
   WHEN @Status = 4 then TMF.InstallDate
   WHEN @Status IS NULL THEN I.UnitBookedDate --or TMF.InstallDate
END
BETWEEN @StartDate AND @EndDate
在哪里
TMFT.IsUnit=1和
I.InstallTypeId<3和
案例
当@Status=2时,则I.UnitBookedDate
当@Status=4时,则为TMF.InstallDate
当@Status为NULL时,则I.UnitBookedDate——或TMF.InstallDate
结束
在@StartDate和@EndDate之间

您是否像这样尝试过

WHERE 
TMFT.IsUnit = 1 AND 
I.InstallTypeId < 3 AND 
(@Status = 2 AND I.UnitBookedDate BETWEEN @StartDate AND @EndDate)
OR (@Status = 4 AND TMF.InstallDate BETWEEN @StartDate AND @EndDate)
OR @Status IS NULL AND (I.UnitBookedDate BETWEEN @StartDate AND @EndDate OR TMF.InstallDate BETWEEN @StartDate AND @EndDate)
在哪里
TMFT.IsUnit=1和
I.InstallTypeId<3和
(@Status=2,I.UnitBookedDate介于@StartDate和@EndDate之间)
或(@Status=4,TMF.InstallDate介于@StartDate和@EndDate之间)
或者@Status为NULL且(I.UnitBookedDate在@StartDate和@EndDate之间,或者TMF.InstallDate在@StartDate和@EndDate之间)

问题出在哪里?是的,我试过了,但是我对返回的结果不满意,因为如果Status=2,我得到30行,如果Status=4,我得到200行,如果Status为null,我得到699行。如果Status为2或4,我希望返回的行数总和等于@Status为null时的行数。但显然不是。事实上,我刚刚再次检查了一些数据,其中一些是垃圾数据,即日期非常旧。所以我认为现在的查询没有问题。