sql >> Base de Datos >  >> RDS >> Sqlserver

Concatenar más de dos tablas horizontalmente en SQL Server

Parece que está tratando de asignar los préstamos "secuencialmente" a las filas de la tabla familiar. El enfoque para resolver esto es obtener primero las filas correctas y luego obtener los préstamos asignados a las filas.

Las filas de la derecha (y las tres primeras columnas) son:

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

Tenga en cuenta que esto no pone guiones en las columnas para valores repetidos, pone los valores reales. Aunque puede organizar los guiones en SQL, es una mala idea. Los resultados de SQL están en forma de tablas, que son conjuntos desordenados con valores para cada columna y cada fila. Cuando empiezas a poner guiones, dependes del orden.

Ahora el problema es incorporarse a los préstamos. En realidad, esto es bastante fácil, usando row_number() para agregar un join clave:

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;

Tenga en cuenta que esto no garantiza el orden de asignación de préstamos para un empleado determinado. Sus datos no parecen tener suficiente información para manejar una asignación más consistente.