Det ser ut som att du försöker tilldela lånen "sekventiellt" till rader i familjetabellen. Metoden för att lösa detta är att först få rätt rader och sedan få lånen tilldelade rader.
De högra raderna (och de tre första kolumnerna) är:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Observera att detta inte sätter bindestreck i kolumnerna för upprepade värden, det sätter in de faktiska värdena. Även om du kan ordna bindestreck i SQL, är det en dålig idé. SQL-resultat är i form av tabeller, som är oordnade uppsättningar med värden för varje kolumn och varje rad. När du börjar sätta bindestreck i, är du beroende av ordningen.
Nu är problemet att gå med i lånen. Detta är faktiskt ganska enkelt, genom att använda row_number()
för att lägga till en join
nyckel:
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;
Observera att detta inte garanterar ordningen för tilldelning av lån för en viss anställd. Din data verkar inte ha tillräckligt med information för att hantera ett mer konsekvent uppdrag.