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