sql >> Database teknologi >  >> RDS >> Sqlserver

Sammenkæd mere end to tabeller vandret i SQL Server

Det ser ud til, at du forsøger at tildele lånene "sekventielt" til rækker i familietabellen. Metoden til at løse dette er først at få de rigtige rækker, og derefter at få lånene tildelt rækker.

De højre rækker (og de første tre kolonner) er:

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

Bemærk, at dette ikke sætter bindestreger i kolonnerne for gentagne værdier, det sætter i de faktiske værdier. Selvom du kan arrangere bindestregerne i SQL, er det en dårlig idé. SQL-resultater er i form af tabeller, som er uordnede sæt med værdier for hver kolonne og hver række. Når du begynder at sætte bindestreger i, er du afhængig af rækkefølgen.

Nu er problemet at komme med i lånene. Dette er faktisk ret nemt ved at bruge row_number() for at tilføje en join nøgle:

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;

Bemærk, at dette ikke garanterer rækkefølgen af ​​tildeling af lån for en given medarbejder. Dine data ser ikke ud til at have nok information til at håndtere en mere konsekvent opgave.



  1. Kan ikke oprette forbindelse til MySQL-server på (ip eller domænenavn)

  2. Hvordan finder man alle tabeller, der har fremmednøgler, der refererer til bestemt table.column og har værdier for disse fremmednøgler?

  3. Brug af ORDER BY og GROUP BY sammen

  4. Opret forbindelse til MySQL fra udefrakommende vagrant