Parece que está tratando de asignar los préstamos "secuencialmente" a las filas de la tabla familiar. El enfoque para resolver esto es obtener primero las filas correctas y luego obtener los préstamos asignados a las filas.
Las filas de la derecha (y las tres primeras columnas) son:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Tenga en cuenta que esto no pone guiones en las columnas para valores repetidos, pone los valores reales. Aunque puede organizar los guiones en SQL, es una mala idea. Los resultados de SQL están en forma de tablas, que son conjuntos desordenados con valores para cada columna y cada fila. Cuando empiezas a poner guiones, dependes del orden.
Ahora el problema es incorporarse a los préstamos. En realidad, esto es bastante fácil, usando row_number()
para agregar un join
clave:
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;
Tenga en cuenta que esto no garantiza el orden de asignación de préstamos para un empleado determinado. Sus datos no parecen tener suficiente información para manejar una asignación más consistente.