Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Concatenar mais de duas tabelas horizontalmente no SQL Server


Parece que você está tentando atribuir os empréstimos "sequencialmente" às ​​linhas da tabela de família. A abordagem para resolver isso é primeiro obter as linhas certas e, em seguida, obter os empréstimos atribuídos às linhas.

As linhas da direita (e as três primeiras colunas) são:
select f.EmpId, e.Name, f.Relationship
from family f join
     Employee e
     on f.empid = e.empid;

Observe que isso não coloca hífens nas colunas para valores repetidos, mas sim os valores reais. Embora você possa organizar os hífens no SQL, é uma má ideia. Os resultados SQL estão na forma de tabelas, que são conjuntos não ordenados com valores para cada coluna e cada linha. Quando você começa a colocar hífens, você está dependendo da ordem.

Agora o problema é aderir aos empréstimos. Isso é realmente muito fácil, usando row_number() para adicionar uma join chave:
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;

Observe que isso não garante a ordem de cessão de empréstimos para um determinado funcionário. Seus dados parecem não ter informações suficientes para lidar com uma atribuição mais consistente.