Я знаю, что есть варианты этого вопроса, но не могу найти тот, который отвечает на то, что я ищу.Зачем использовать Case in Where Section
Я унаследовал базу данных и отчеты от другого программиста, которого больше нет на картинке.
Один из запросов использует этот код:
Select
b.HospitalMasterID
,b.TxnSite
,b.PatientID
,b.TxnDate as KeptDate
From
Billing as b
Inner Join Patient as p
on b.HospitalMasterID = p.HospitalMasterID
and b.PatientID = p.PatientID
Where
b._IsServOrItem=1
and b.TxnDate >= '20131001'
and (Case
When b.ExtendedAmount > 0 Then 1
When (Not(p.PlanCode is null)) and (b.listAmount >0) then 1
End = 1)
При запуске запроса я получаю APX 900000 возвращаемых строк. Если я удалю оператор Case, я получаю более миллиона возвращенных строк.
Может кто-нибудь объяснить, почему это так? Что конкретно делает заявление о делах? Есть ли лучший способ сделать то же самое. Мне действительно не нравится это утверждение в его нынешнем виде, и весь запрос отчета очень трудно прочитать из-за отсутствия структуры.
Версия Sql является T-Sql 2012
Спасибо,
Это может быть артефакт, оставшийся от более раннего кода, в котором было больше предложений WHEN, или кто-то, возможно, ожидал добавления позже, и это казалось хорошей идеей. Он даже избегает использования 'p.PlanCode не NULL'. Вздох. – HABO