Где пункт основан на условии - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время у меня есть оператор выбора, который изменяется в зависимости от условия:

if @LoadUsage = '|CreateBatch|'
                        begin
                            -- Do lookup on ClaimNumber and InterchangeName provided
                            -- Use @version scalar to filter latest InputAdjustmentVersion
                            select @ClaimSubmissionNumber = CS.ClaimSubmissionNumber 
                            from ClaimSubmissions CS inner join Claims C on C.ClaimID = CS.ClaimID
                                               inner join InterchangeInfo I on CS.InterchangeId = I.InterchangeId
                            where I.InterchangeName = @InterchangeName
                                and C.ClaimNumber = @ClaimNumber
                                and CS.SubmissionStatus in (select SubmissionStatus from @AllowedSubmissionStatus)
                                and Cs.InputAdjustmentVersion = @Version
                        end
                    else
                        begin
                            -- Do lookup on ClaimNumber and InterchangeName provided
                            select @ClaimSubmissionNumber = CS.ClaimSubmissionNumber 
                            from ClaimSubmissions CS inner join Claims C on C.ClaimID = CS.ClaimID
                                inner join InterchangeInfo I on CS.InterchangeId = I.InterchangeId
                            where I.InterchangeName = @InterchangeName
                                and C.ClaimNumber = @ClaimNumber
                                and CS.SubmissionStatus in (select SubmissionStatus from @AllowedSubmissionStatus)
                        end

Если скаляр @LoadUsage равен '|CREATEBATCH|', я добавляю еще одну проверку (and Cs.InputAdjustmentVersion = @Version) к предложению where. Есть ли способ сделать это с помощью оператора case в предложении where вместо двух разных операторов select?

Ответы [ 2 ]

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

да, вы должны иметь возможность добавить @LoadUsage = '| CreateBatch |'к ГДЕ, и имеют соответствующую логику в зависимости от того, является ли истина или ложь. например,

WHERE @LoadUsage = '|CreateBatch|' AND (..logic 1....) 
         OR  @LoadUsage <> '|CreateBatch|' AND (...logic 2...)
0 голосов
/ 04 ноября 2019

Просто используйте OR:

select @ClaimSubmissionNumber = CS.ClaimSubmissionNumber 
from ClaimSubmissions CS inner join Claims C on C.ClaimID = CS.ClaimID
                   inner join InterchangeInfo I on CS.InterchangeId = I.InterchangeId
where I.InterchangeName = @InterchangeName
    and C.ClaimNumber = @ClaimNumber
    and CS.SubmissionStatus in (select SubmissionStatus from @AllowedSubmissionStatus)
    and (@LoadUsage <> '|CreateBatch|' or Cs.InputAdjustmentVersion = @Version)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...