Het lijkt erop dat u probeert de leningen "opeenvolgend" toe te wijzen aan rijen in de familietabel. De aanpak om dit op te lossen is om eerst de juiste rijen te krijgen en vervolgens de leningen aan rijen toe te wijzen.
De rechter rijen (en de eerste drie kolommen) zijn:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Merk op dat dit geen koppeltekens in de kolommen plaatst voor herhaalde waarden, maar de werkelijke waarden. Hoewel je de koppeltekens in SQL kunt regelen, is het een slecht idee. SQL-resultaten hebben de vorm van tabellen, dit zijn ongeordende sets met waarden voor elke kolom en elke rij. Wanneer je koppeltekens gaat plaatsen, ben je afhankelijk van de volgorde.
Nu is het probleem om mee te doen aan de leningen. Dit is eigenlijk vrij eenvoudig, met behulp van row_number()
om een join
toe te voegen sleutel:
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;
Merk op dat dit niet de volgorde van toewijzing van leningen voor een bepaalde werknemer garandeert. Je gegevens lijken niet voldoende informatie te hebben om een consistentere opdracht af te handelen.