ฉันเคยใช้ 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
สิ่งที่ฉันพยายามทำคือรับผลรวมของพรีเมี่ยมและผลรวมของการสูญเสียจากทั้งสองตารางและ Policy_Number รหัสที่ฉันใช้คือ:
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 ในแบบสอบถามภายนอกหรืออะไรก็ได้ ??? ฉันไม่คิดว่ามันจะซับซ้อนขนาดนี้
ความคิดหรือคำแนะนำใด ๆ