Я использовал Full Outer Joins прежде, чтобы получить желаемые результаты, но, возможно, я не до конца понимаю концепцию, потому что не могу выполнить то, что должно быть простым соединением.
У меня есть 2 таблицы (которые я назову t1 и t2) с 2 полями каждая:
t1
Policy_Number Premium
101 15
102 7
103 10
108 25
111 3
t2
Policy_Number Loss
101 5
103 9
107 20
То, что я пытаюсь сделать, это получить сумму премии и суммы потерь из обеих таблиц, а также номер_политики. Код, который я использую:
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
Приведенный выше код вернет правильные итоговые суммы, но он сгруппирует все записи, в которых нет совпадения с policy_number в разделе "NULL" policy_number
Я хотел бы, чтобы мой результат выглядел так
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
и т.д.....
Я не хочу, чтобы результат, который показывает NULL policy_number, как показано ниже (поскольку не существует такой вещи, как NULL policy_number. Это всего лишь сумма, когда номер policy_number из обеих таблиц не совпадает):
Policy_Number Prem_Sum Loss_Sum
NULL 35 NULL
Если я выбираю и группирую по t2.policy_number вместо t1.policy_number, то получаю что-то вроде ниже в качестве записи.
Policy_Number Prem_Sum Loss_Sum
NULL NULL 20
Опять же, я не против видеть NULL в Prem_Sum или в Loss_sum, но я не хочу NULL в Policy_Number. Я хотел бы, чтобы мои результаты были чем-то вроде
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
ЭСТ .....
Я думал, что полное внешнее соединение достигнет этого, но я думаю, что что-то упустил. Я думал, может быть, я мог бы выбрать и сгруппировать по t1.policy_number и t2.policy_number как подзапрос, а затем, возможно, сделать CASE во внешнем запросе или что-то в этом роде ??? Я не думаю, что это должно быть так сложно.
Есть идеи или советы?