Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nối nhiều hơn hai bảng theo chiều ngang trong SQL Server

Có vẻ như bạn đang cố gắng gán các khoản vay "tuần tự" cho các hàng trong bảng gia đình. Cách tiếp cận để giải quyết vấn đề này trước tiên là tạo các hàng phù hợp, sau đó nhận các khoản vay được chỉ định cho các hàng.

Các hàng bên phải (và ba cột đầu tiên) là:

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

Lưu ý rằng điều này không đặt dấu gạch ngang trong các cột cho các giá trị lặp lại, nó đặt vào các giá trị thực tế. Mặc dù bạn có thể sắp xếp các dấu gạch nối trong SQL, nhưng đó là một ý tưởng tồi. Kết quả SQL có dạng bảng, là các tập hợp không có thứ tự với các giá trị cho mỗi cột và mỗi hàng. Khi bạn bắt đầu đặt dấu gạch ngang, bạn tùy thuộc vào thứ tự.

Bây giờ vấn đề là tham gia vào các khoản vay. Điều này thực sự khá dễ dàng, bằng cách sử dụng row_number() để thêm một join khóa:

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;

Lưu ý rằng điều này không đảm bảo thứ tự chuyển nhượng các khoản vay cho một nhân viên nhất định. Dữ liệu của bạn dường như không có đủ thông tin để xử lý một nhiệm vụ nhất quán hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CHỌN từ dấu phẩy thứ 3 trong chuỗi

  2. Giao dịch xung quanh một câu lệnh đơn làm gì?

  3. Tách Ngày thành 2 Cột (Ngày + Giờ) trong SQL

  4. TSQL-2008 SUM (X) HẾT (PHẦN ... ĐẶT HÀNG CỦA KHÁCH HÀNG)

  5. Khám phá SQL Server 2014 CHỌN VÀO song song