Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Свържете повече от две таблици хоризонтално в SQL Server

Изглежда, че се опитвате да присвоите заемите "последователно" на редове в семейната таблица. Подходът за решаване на това е първо да получите правилните редове и след това да получите заемите, присвоени на редовете.

Десните редове (и първите три колони) са:

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

Обърнете внимание, че това не поставя тирета в колоните за повтарящи се стойности, а поставя действителните стойности. Въпреки че можете да подредите тиретата в SQL, това е лоша идея. Резултатите от SQL са под формата на таблици, които са неподредени набори със стойности за всяка колона и всеки ред. Когато започнете да поставяте тирета, зависи от реда.

Сега проблемът е приобщаването към заемите. Това всъщност е доста лесно, като използвате row_number() за да добавите join ключ:

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;

Имайте предвид, че това не гарантира реда на преотстъпване на заеми за даден служител. Вашите данни изглежда нямат достатъчно информация, за да се справят с по-последователно присвояване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инструкции SELECT на SQL Server, причиняващи блокиране

  2. Как да открием дали дадена стойност съдържа поне едно число в SQL Server

  3. CONCAT(колона) OVER(PARTITION BY...)? Групиране на редове, без групиране на самия резултат

  4. Използване на SQL Server като хранилище за изображения

  5. Как да се справим с имената на колони в SQL, които изглеждат като SQL ключови думи?