Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Połącz więcej niż dwie tabele poziomo w SQL Server

Wygląda na to, że próbujesz przypisać pożyczki „sekwencyjnie” do wierszy w tabeli rodziny. Rozwiązaniem tego problemu jest najpierw uzyskanie właściwych wierszy, a następnie uzyskanie pożyczek przypisanych do wierszy.

Prawe wiersze (i pierwsze trzy kolumny) to:

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

Zauważ, że to nie umieszcza myślników w kolumnach dla powtarzających się wartości, wstawia rzeczywiste wartości. Chociaż możesz ustawić myślniki w SQL, jest to zły pomysł. Wyniki SQL mają postać tabel, które są nieuporządkowanymi zestawami z wartościami dla każdej kolumny i każdego wiersza. Kiedy zaczynasz wstawiać myślniki, zależysz od kolejności.

Teraz problemem jest przyłączenie się do pożyczek. Jest to całkiem proste, używając row_number() aby dodać join klawisz:

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;

Należy pamiętać, że nie gwarantuje to kolejności cesji pożyczek dla danego pracownika. Twoje dane nie zawierają wystarczających informacji, aby obsłużyć bardziej spójne zadanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL pobiera tylko wartości liczbowe z varchar

  2. Zwrócić identyfikator przy INSERT?

  3. Jak działa OBJECTPROPERTY() w SQL Server

  4. GROUP BY, aby połączyć/połączyć kolumnę

  5. Zmiana domeny serwera SQL 2008