Как избежать оператора IF для контроля оператора WHERE - PullRequest
0 голосов
/ 10 июня 2019

У меня есть код ниже, который работает и делает то, что ему нужно.

Однако мне нужно обработать два точных запроса с помощью оператора IF.

Может кто-нибудь увидеть способ покончить с IF?

IF @ReportClientTypeAbbreviation = 'IA'
BEGIN
    select  
        *
    from 
        Client CR
    Inner Join LookUp.ClientType CT on 
        CR.ClientTypeID = CT.ClientTypeID
    where
        CR.SubmitDate >=@ReportStartDate and CR.SubmitDate <=@ReportEndDate and
        CT.ReportClientTypeAbbreviation = 'IA'
END
ELSE
BEGIN
    select  
        *
    from 
        Client CR
    Left Join LookUp.ClientType CT on 
        CR.ClientTypeID = CT.ClientTypeID
    where
        CR.SubmitDate >=@ReportStartDate and CR.SubmitDate <=@ReportEndDate and
        (CT.ReportClientTypeAbbreviation = 'NonIA' or CT.ReportClientTypeAbbreviation is null)
END

1 Ответ

4 голосов
/ 10 июня 2019

Вы можете объединять запросы, используя логику И / ИЛИ, которая необходима для запросов SQL. Ниже показано, как это сделать (не проверено - но должно дать вам достаточно для продолжения):

select *
from Client CR
left join LookUp.ClientType CT on CR.ClientTypeID = CT.ClientTypeID
where CR.SubmitDate >= @ReportStartDate and CR.SubmitDate <= @ReportEndDate
and (
  (CT.ReportClientTypeAbbreviation = 'IA' and @ReportClientTypeAbbreviation = 'IA')
  or (
    @ReportClientTypeAbbreviation != 'IA' and (CT.ReportClientTypeAbbreviation = 'NonIA' or CT.ReportClientTypeAbbreviation is null)
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...