sql >> Database >  >> RDS >> Sqlserver

Meer dan twee tabellen horizontaal samenvoegen in SQL Server

Het lijkt erop dat u probeert de leningen "opeenvolgend" toe te wijzen aan rijen in de familietabel. De aanpak om dit op te lossen is om eerst de juiste rijen te krijgen en vervolgens de leningen aan rijen toe te wijzen.

De rechter rijen (en de eerste drie kolommen) zijn:

select f.EmpId, e.Name, f.Relationship
from family f join
     Employee e
     on f.empid = e.empid;

Merk op dat dit geen koppeltekens in de kolommen plaatst voor herhaalde waarden, maar de werkelijke waarden. Hoewel je de koppeltekens in SQL kunt regelen, is het een slecht idee. SQL-resultaten hebben de vorm van tabellen, dit zijn ongeordende sets met waarden voor elke kolom en elke rij. Wanneer je koppeltekens gaat plaatsen, ben je afhankelijk van de volgorde.

Nu is het probleem om mee te doen aan de leningen. Dit is eigenlijk vrij eenvoudig, met behulp van row_number() om een ​​join toe te voegen sleutel:

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;

Merk op dat dit niet de volgorde van toewijzing van leningen voor een bepaalde werknemer garandeert. Je gegevens lijken niet voldoende informatie te hebben om een ​​consistentere opdracht af te handelen.



  1. Oracle SQL-syntaxis - Controleer meerdere kolommen op IS NIET NULL

  2. 'Te veel verbindingen' gemaakt in postgres bij het maken van een dashboard in Pentaho

  3. Ik kan de bundelupdate niet uitvoeren vanwege mysql2 gem

  4. Hoe werkt GROUP BY?