Có vẻ như bạn đang cố gắng gán các khoản vay "tuần tự" cho các hàng trong bảng gia đình. Cách tiếp cận để giải quyết vấn đề này trước tiên là tạo các hàng phù hợp, sau đó nhận các khoản vay được chỉ định cho các hàng.
Các hàng bên phải (và ba cột đầu tiên) là:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Lưu ý rằng điều này không đặt dấu gạch ngang trong các cột cho các giá trị lặp lại, nó đặt vào các giá trị thực tế. Mặc dù bạn có thể sắp xếp các dấu gạch nối trong SQL, nhưng đó là một ý tưởng tồi. Kết quả SQL có dạng bảng, là các tập hợp không có thứ tự với các giá trị cho mỗi cột và mỗi hàng. Khi bạn bắt đầu đặt dấu gạch ngang, bạn tùy thuộc vào thứ tự.
Bây giờ vấn đề là tham gia vào các khoản vay. Điều này thực sự khá dễ dàng, bằng cách sử dụng row_number()
để thêm một join
khóa:
select f.EmpId, e.Name, f.Relationship, l.LoanId
from Employee e left join
(select f.*, row_number() over (partition by f.EmpId order by (select NULL)) as seqnum
from family f
) f
on f.empid = e.empid left join
(select l.*, row_number() over (partition by l.EmpId order by (select NULL)) as seqnum
from Loan l
) l
on f.EmpId = l.EmpId and f.seqnum = l.seqnum;
Lưu ý rằng điều này không đảm bảo thứ tự chuyển nhượng các khoản vay cho một nhân viên nhất định. Dữ liệu của bạn dường như không có đủ thông tin để xử lý một nhiệm vụ nhất quán hơn.