Оператор T-SQL Case в задаче Where - PullRequest
0 голосов
/ 04 ноября 2010

Я пытаюсь заставить предложение WHERE работать так,

  • когда @Status равен 2, найдите, где UnitBookedDate находится между StartDate и EndDate

  • когда @Status равен 4, найдите, где InstallDate находится между StartDate и EndDate

  • когда @Status равен нулю, найдите, где UnitBookedDate ИЛИ InstallDate находится между StartDate и EndDate

Я думаю, что, возможно, оператор CASE не сработает для того, что мне нужно.

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

1 Ответ

1 голос
/ 04 ноября 2010

Вы пробовали это так ...

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)
...