Tôi đã sử dụng Full Outer Joins trước đây để có kết quả mong muốn, nhưng có lẽ tôi không hiểu đầy đủ về khái niệm này vì tôi không thể thực hiện được những gì nên tham gia đơn giản.
Tôi có 2 bảng (mà tôi gọi là t1 và t2) với 2 trường mỗi bảng:
t1
Policy_Number Premium
101 15
102 7
103 10
108 25
111 3
t2
Policy_Number Loss
101 5
103 9
107 20
Những gì tôi đang cố gắng làm là nhận được tổng phí và tổng thiệt hại từ cả hai bảng và cả Chính sách_Nội số. Mã tôi đang sử dụng là:
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
Đoạn mã trên sẽ trả về tổng số chính xác nhưng nó sẽ nhóm tất cả các bản ghi trong đó không có kết quả trùng khớp chính sách trong "NULL" chính sách số.
Tôi muốn kết quả của tôi trông như thế này
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
Vân vân.....
Tôi không muốn một kết quả hiển thị số chính sách NULL như được hiển thị bên dưới (vì không có thứ gọi là chính sách NULL. Đây chỉ là tổng số khi số chính sách từ cả hai bảng không khớp):
Policy_Number Prem_Sum Loss_Sum
NULL 35 NULL
Nếu tôi chọn và nhóm theo t2.policy_number thay vì t1.policy_number thì tôi nhận được một cái gì đó như dưới đây như một bản ghi.
Policy_Number Prem_Sum Loss_Sum
NULL NULL 20
Một lần nữa, tôi không phiền khi thấy NULL dưới Prem_Sum hoặc dưới Loss_sum nhưng tôi không muốn có NULL theo Chính sách_Number. Tôi muốn kết quả của tôi là một cái gì đó như
Policy_Number Prem_Sum Loss_Sum
107 NULL 20
111 3 NULL
101 15 5
Vân vân.....
Tôi nghĩ rằng sự tham gia bên ngoài đầy đủ sẽ thực hiện điều này nhưng tôi đoán tôi đang thiếu một cái gì đó. Tôi đã nghĩ có lẽ tôi có thể chọn và nhóm theo cả t1.policy_number và t2.policy_number làm truy vấn phụ và sau đó có thể thực hiện CASE trong truy vấn bên ngoài hoặc một cái gì đó ??? Tôi không nghĩ nó nên phức tạp như vậy.
Bất kỳ ý tưởng hoặc lời khuyên?