Изглежда, че се опитвате да присвоите заемите "последователно" на редове в семейната таблица. Подходът за решаване на това е първо да получите правилните редове и след това да получите заемите, присвоени на редовете.
Десните редове (и първите три колони) са:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
Обърнете внимание, че това не поставя тирета в колоните за повтарящи се стойности, а поставя действителните стойности. Въпреки че можете да подредите тиретата в SQL, това е лоша идея. Резултатите от SQL са под формата на таблици, които са неподредени набори със стойности за всяка колона и всеки ред. Когато започнете да поставяте тирета, зависи от реда.
Сега проблемът е приобщаването към заемите. Това всъщност е доста лесно, като използвате row_number()
за да добавите join
ключ:
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;
Имайте предвид, че това не гарантира реда на преотстъпване на заеми за даден служител. Вашите данни изглежда нямат достатъчно информация, за да се справят с по-последователно присвояване.