TSQL Как фильтровать внутри оператора CASE?

Я пытаюсь выяснить, как отфильтровать по дате / получить все параметры без даты ТОЛЬКО КОГДА @getdisabledoptions = 0, в противном случае, если @getdisabledoptions = 1, я хочу получить все параметры.

WHERE AffiliationID = @AffiliationID
AND  
case  

это тот случай, когда я хочу фильтровать по отключенной дате или получить нулевые значения, если @getdisabledoptions = null

when @GetDisabledOptions = 0 then DisabledDate > GETDATE() or DisabledDate = IS NULL

в противном случае здесь я хочу просто извлечь все, где AffiliationId = @affiliationId, а не фильтровать по дате

else end 

Что я здесь не так делаю? Я пытался найти другие ответы, но я не правильно что-то формулирую.

Всего 3 ответа


На основе описанной вами логики вы можете упростить выражение WHERE до:

WHERE AffiliationID = @AffiliationID
AND (@GetDisabledOptions = 1 or DisabledDate > GETDATE() or DisabledDate IS NULL)

Вы можете использовать логическое выражение вместо case :

where (@GetDisabledOptions = 0 and DisabledDate > GETDATE()) or
      (@GetDisabledOptions = 1 and AffiliationID = @AffiliationID);

попробуй это

WHERE AffiliationID = @AffiliationID
AND ( @GetDisabledOptions = 1 OR (DisabledDate > GETDATE() or DisabledDate = IS NULL))

Есть идеи?

10000