Я попытался найти в Google CaseStatement в предложении WHERE. Но я не нашел похожего на свой сценарий.
Ниже приведен мой оператор SQL с оператором CASE в предложении WHERE. Если PartName = B, то я должен применить (RecoveraleFlag = 1) условие вместе с другими условиями. Иначе Это условие не должно применяться, но все остальные условия должны оставаться.
FROM Rec.Communications A
INNER JOIN REC.CommunicationTypes B ON A.CommunicationTypeKey = B.CommunicationTypeKey
INNER JOIN occ.Cases c ON a.CaseId = c.CaseId
INNER JOIN occ.Claims cl on a.CaseId = cl.CaseId
INNER JOIN ops.Concepts d ON c.ConceptKey = d.ConceptKey
INNER JOIN OPS.Regions f ON d.MODSRegionKey = f.MODSRegionKey
INNER JOIN COM.RepriceRequestOccurrences e ON a.CommunicationId = e.CommunicationId
INNER JOIN occ.Providers prv ON c.MODSProviderKey = prv.MODSProviderKey
WHERE
**(
CASE WHEN f.PartName = 'B' and e.RecoverableFlag = 1 then 1
ELSE 0
END
) = 1**
AND
b.CommunicationTypeCode = 'RREQ'
AND f.Region = @Region
AND a.CurrentFlag = 1
Здесь оператор Case в предложении where работает нормально, если Partname = B. Для Partname A это будет 0 = 1 - всегда ложно. Из-за этого он не возвращает никаких данных. Может кто какие альтернативы дает.