Wcześniej korzystałem z funkcji Full Outer Joins, aby uzyskać pożądane wyniki, ale być może nie do końca rozumiem tę koncepcję, ponieważ nie jestem w stanie osiągnąć czegoś, co powinno być prostym połączeniem.
Mam 2 tabele (które nazywam t1 i t2) z 2 polami:
t1
Policy_Number Premium
101 15
102 7
103 10
108 25
111 3
t2
Policy_Number Loss
101 5
103 9
107 20
Usiłuję uzyskać sumę premii i sumę strat z obu tabel, a także numer polisy. Używam kodu:
select sum(premium) Prem_Sum, sum(Loss) Loss_Sum, t1.policynumber
from t1 full outer join t2 on t1.policynumber = t2.policynumber
group by t1.policynumber
Powyższy kod zwróci prawidłowe sumy całkowite, ale zgrupuje wszystkie rekordy, w których nie ma dopasowania numer_zasad w polu „NULL” numer_zasad.
Chciałbym, aby mój wynik wyglądał tak
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
itp.....
Nie chcę wyniku, który pokazuje NULL numer_zasad, jak pokazano poniżej (ponieważ nie ma czegoś takiego jak NULL numer_zasad. Jest to tylko suma, gdy numer_zasad z obu tabel nie pasuje):
Policy_Number Prem_Sum Loss_Sum
NULL 35 NULL
Jeśli wybiorę i pogrupuję według t2.policy_number zamiast t1.policy_number, wówczas otrzymam coś takiego jak poniżej.
Policy_Number Prem_Sum Loss_Sum
NULL NULL 20
Ponownie, nie mam nic przeciwko zobaczeniu NULL w Prem_Sum lub w Loss_sum, ale nie chcę NULL w Policy_Number. Chciałbym, żeby moje wyniki były podobne
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
ect .....
Myślałem, że pełne połączenie zewnętrzne to umożliwi, ale chyba coś mi umknęło. Myślałem, że może mógłbym wybrać i pogrupować według zarówno t1.policy_number jak i t2.policy_number jako zapytanie podrzędne, a następnie może zrobić PRZYPADEK w zapytaniu zewnętrznym lub coś takiego? Nie sądzę, że powinno to być tak skomplikowane.
Wszelkie pomysły lub porady?