He usado Full Outer Joins antes para obtener los resultados deseados, pero tal vez no entiendo completamente el concepto porque no puedo lograr lo que debería ser una simple unión.
Tengo 2 tablas (que llamaré t1 y t2) con 2 campos cada una:
t1
Policy_Number Premium
101 15
102 7
103 10
108 25
111 3
t2
Policy_Number Loss
101 5
103 9
107 20
Lo que intento hacer es obtener la suma de la prima y la suma de las pérdidas de ambas tablas y también el número de política. El código que estoy usando es:
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
El código anterior devolverá los totales de suma correctos, pero agrupará todos los registros donde no haya una coincidencia de número_política bajo el número_política "NULL".
Me gustaría que mi resultado se vea así
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
etc .....
No quiero un resultado que muestre un número de política NULL como se muestra a continuación (ya que no existe un número de política NULL. Esto es solo el total para cuando el número de política de ambas tablas no coincide):
Policy_Number Prem_Sum Loss_Sum
NULL 35 NULL
Si selecciono y agrupo por t2.policy_number en lugar de t1.policy_number, obtengo algo como a continuación como registro.
Policy_Number Prem_Sum Loss_Sum
NULL NULL 20
Nuevamente, no me importa ver NULL en Prem_Sum o en Loss_sum, pero no quiero NULL en Policy_Number. Me gustaría que mis resultados fueran algo así
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
ect .....
Pensé que la combinación externa completa lograría esto, pero supongo que me falta algo. ¿Estaba pensando que tal vez podría seleccionar y agrupar por t1.policy_number y t2.policy_number como una subconsulta y luego quizás hacer un CASO en la consulta externa o algo así? No creo que deba ser tan complicado.
¿Alguna idea o consejo?