T SQL Как мне выполнить фильтрацию внутри оператора CASE? - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь выяснить, как отфильтровать по дате / получить все параметры без даты, ТОЛЬКО КОГДА @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 ]

0 голосов
/ 15 января 2020

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

where (@GetDisabledOptions = 0 and DisabledDate > GETDATE()) or
      (@GetDisabledOptions = 1 and AffiliationID = @AffiliationID);
0 голосов
/ 16 января 2020

попробуйте

WHERE AffiliationID = @AffiliationID
AND ( @GetDisabledOptions = 1 OR (DisabledDate > GETDATE() or DisabledDate = IS NULL))
0 голосов
/ 15 января 2020

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

WHERE AffiliationID = @AffiliationID
AND (@GetDisabledOptions = 1 or DisabledDate > GETDATE() or DisabledDate IS NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...