sql >> Databasteknik >  >> RDS >> Sqlserver

Sammanfoga mer än två tabeller horisontellt i SQL Server

Det ser ut som att du försöker tilldela lånen "sekventiellt" till rader i familjetabellen. Metoden för att lösa detta är att först få rätt rader och sedan få lånen tilldelade rader.

De högra raderna (och de tre första kolumnerna) är:

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

Observera att detta inte sätter bindestreck i kolumnerna för upprepade värden, det sätter in de faktiska värdena. Även om du kan ordna bindestreck i SQL, är det en dålig idé. SQL-resultat är i form av tabeller, som är oordnade uppsättningar med värden för varje kolumn och varje rad. När du börjar sätta bindestreck i, är du beroende av ordningen.

Nu är problemet att gå med i lånen. Detta är faktiskt ganska enkelt, genom att använda row_number() för att lägga till en join nyckel:

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;

Observera att detta inte garanterar ordningen för tilldelning av lån för en viss anställd. Din data verkar inte ha tillräckligt med information för att hantera ett mer konsekvent uppdrag.



  1. Hur läser jag ett postgresql citextfält med npgsql 3.0.0?

  2. Hur man väljer DISTINCT rader utan att ha ORDER BY-fältet markerat

  3. TSQL CASE med if-jämförelse i SELECT-satsen

  4. oracle deadlock förälder/barn och barn har indexerat FK