Wygląda na to, że próbujesz przypisać pożyczki „sekwencyjnie” do wierszy w tabeli rodziny. Rozwiązaniem tego problemu jest najpierw uzyskanie właściwych wierszy, a następnie uzyskanie pożyczek przypisanych do wierszy.
Prawe wiersze (i pierwsze trzy kolumny) to:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Zauważ, że to nie umieszcza myślników w kolumnach dla powtarzających się wartości, wstawia rzeczywiste wartości. Chociaż możesz ustawić myślniki w SQL, jest to zły pomysł. Wyniki SQL mają postać tabel, które są nieuporządkowanymi zestawami z wartościami dla każdej kolumny i każdego wiersza. Kiedy zaczynasz wstawiać myślniki, zależysz od kolejności.
Teraz problemem jest przyłączenie się do pożyczek. Jest to całkiem proste, używając row_number()
aby dodać join
klawisz:
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;
Należy pamiętać, że nie gwarantuje to kolejności cesji pożyczek dla danego pracownika. Twoje dane nie zawierają wystarczających informacji, aby obsłużyć bardziej spójne zadanie.