2017-02-21 7 views
2

Я написал следующий запрос, который соединяет таблицу с уже соединенными таблицами. Я в основном использовал внутреннее соединение с использованием SQL Server. Мне интересно, как изменить приведенный ниже код, чтобы использовать Left join, а не внутреннее соединение?Как использовать левое соединение вместо внутреннего соединения

Ниже запрос три таблицы Смешанное, BOUND_TAB и RECORD

Вторая вещь, мне также нужно отфильтровать результаты, такие, что я использую политику с deductibleinUSD> 0 в «Blended» таблицы или Primary_R Type = ' Deductible 'и Primary_R Amount> 0 из внутреннего выбора. Это должно предоставить мне политики в моих окончательных результатах, если либо «Смешанный», либо «BOUND_TAB» указывает, что он имеет франшизу.

select 
    c.MPolicyNumber, 
    c.SNumber, 
    c.InsuredName, 
    c.EffDate, 
    c.Renewal, 
    c.GPremiumUSD, 
    c.Status, 
    c.deductibleinUSD, t.* 
from 
    IT.dbo.Blended c 
inner join 
    (select distinct 
     a.[Policy Number], a.[LOB], 
     a.[Primary_R Amount] as Bound_deductibles, 
     a.[Primary_R Type], 
     a.[EffDate] as CAS_EffDate 
    from 
     IT.dbo.BOUND_TAB a 
    inner join 
     IT.dbo.RECORD b on a.idxFile = b.[Bound Rater] 
    where 
     a.[Primary Retention Amount] > 0) t on t.[Policy Number] = c.MPolicyNumber 
where 
    c.deductibleinUSD > 0 
    and c.ProductLine in ('Health','Cas') 
order by 
    c.EffDate 

Заранее благодарен!

+2

Какой вопрос? –

+0

Для вашего первого «вопроса»: зачем вам «LEFT OUTER JOIN»? что мешает вам просто заменить 'INNER' в вашем запросе? Для вашего второго вопроса: просто укажите эти фильтры в предложении 'WHERE'. Теперь, 'ProductLine' включительно с другими фильтрами или просто с' deductibleUSD'? –

ответ

2

Без примера данных и пример желаемых результатов, это лучшее, что я могу угадать основанный на ваш вопрос:

select 
    c.MPolicyNumber 
    , c.SNumber 
    , c.InsuredName 
    , c.EffDate 
    , c.Renewal 
    , c.GPremiumUSD 
    , c.Status 
    , c.deductibleinUSD 
    , t.* 
from IT.dbo.Blended c 
    left join (
    select distinct 
     a.[Policy Number] 
     , a.[LOB] 
     , a.[Primary_R Amount] as Bound_deductibles 
     , a.[Primary_R Type] 
     , a.[EffDate] as CAS_EffDate 
    from IT.dbo.BOUND_TAB a 
     inner join IT.dbo.RECORD b 
     on a.idxFile = b.[Bound Rater] 
    where a.[Primary Retention Amount] > 0 
) as t 
    on t.[Policy Number] = c.MPolicyNumber 
    and c.ProductLine in ('Health','Cas') 
    and (c.deductibleinUSD > 0 
     or (Primary_R Type = 'Deductible' 
     and Bound_deductibles > 0 
     ) 
    ) 
order by c.EffDate