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

Đối sánh dữ liệu từ ba bảng trong Sql Server 2008

Tôi nghĩ bạn có thể sử dụng các phép nối trái để làm điều này. Hãy thử truy vấn này, với dữ liệu mẫu của bạn, nó tạo ra kết quả mong muốn, ngoại trừ ApprovedQty , nhưng tôi không hiểu bằng cách nào bạn đến 12 cho điều đó với dữ liệu mẫu:

select 
    d.LOTQty, 
    ApprovedQty = count(d.ProductNo),
    d.DispatchDate,
    Installed = count(a.ProductNo) + count(r.ProductNo)
from 
    Despatch d 
left join 
    Activation a 
     on d.ProductNo = a.ProductNo 
    and d.DispatchDate < a.ActivationDate 
    and d.LOTQty = a.LOTQty
left join 
    Replaced r 
      on d.ProductNo = r.ProductNo 
     and d.DispatchDate < r.RecordDate
     -- only count Replaced when there is no match in Activation
     -- or DispatchDate is greater then ActivationDate
     and (a.ActivationDate is null or a.ActivationDate < d.DispatchDate)
where 
    d.LOTQty = 20
group by 
    d.LOTQty, d.DispatchDate

điều này sẽ xuất ra:

LOTQty  ApprovedQty DispatchDate    Installed
20      6           2013-08-07      5



  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 Server:Mệnh đề where-động

  2. Bạn có thể đặt Lược đồ mặc định cho Truy vấn SQL 2008 không

  3. Làm cách nào để kiểm tra các bản sao trước khi chèn vào bảng khi chèn bằng cách chọn

  4. Thay đổi CTE SELECT thành hàm do người dùng xác định giá trị bảng

  5. đệ quy cte với các chức năng xếp hạng