Es sieht so aus, als ob Sie versuchen, die Darlehen "sequenziell" Zeilen in der Familientabelle zuzuweisen. Der Ansatz zur Lösung dieses Problems besteht darin, zuerst die richtigen Zeilen zu erhalten und dann die Kredite den Zeilen zuzuweisen.
Die rechten Zeilen (und die ersten drei Spalten) sind:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Beachten Sie, dass dies keine Bindestriche in die Spalten für wiederholte Werte einfügt, sondern die tatsächlichen Werte einfügt. Obwohl Sie die Bindestriche in SQL arrangieren können, ist dies eine schlechte Idee. SQL-Ergebnisse liegen in Form von Tabellen vor, bei denen es sich um ungeordnete Mengen mit Werten für jede Spalte und jede Zeile handelt. Wenn Sie anfangen, Bindestriche einzufügen, sind Sie von der Reihenfolge abhängig.
Jetzt besteht das Problem darin, die Kredite aufzunehmen. Dies ist eigentlich ziemlich einfach, indem Sie row_number()
verwenden um einen join
hinzuzufügen Schlüssel:
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;
Beachten Sie, dass dies die Reihenfolge der Zuweisung von Darlehen für einen bestimmten Mitarbeiter nicht garantiert. Ihre Daten scheinen nicht genügend Informationen für eine konsistentere Zuordnung zu enthalten.