Sembra che tu stia tentando di assegnare i prestiti "in sequenza" alle righe nella tabella famiglia. L'approccio per risolvere questo problema consiste nell'ottenere prima le righe giuste, quindi ottenere i prestiti assegnati alle righe.
Le righe di destra (e le prime tre colonne) sono:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Nota che questo non inserisce i trattini nelle colonne per i valori ripetuti, ma inserisce i valori effettivi. Sebbene tu possa organizzare i trattini in SQL, è una cattiva idea. I risultati SQL sono sotto forma di tabelle, che sono insiemi non ordinati con valori per ogni colonna e ogni riga. Quando inizi a inserire i trattini, dipendi dall'ordine.
Ora il problema è l'adesione ai prestiti. Questo è in realtà abbastanza semplice, usando row_number()
per aggiungere un join
chiave:
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;
Si noti che ciò non garantisce l'ordine di assegnazione dei prestiti per un determinato dipendente. Sembra che i tuoi dati non dispongano di informazioni sufficienti per gestire un'assegnazione più coerente.