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

Dopasowywanie danych z trzech tabel w SQL Server 2008

Myślę, że możesz do tego użyć lewych sprzężeń. Wypróbuj to zapytanie, z przykładowymi danymi generuje żądane dane wyjściowe, z wyjątkiem ApprovedQty , ale nie rozumiem, jak dotarłeś do 12 w tym celu z przykładowymi danymi:

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

to dałoby:

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. Zdarzenia oczekiwania serwera SQL -1

  2. Z (NOLOCK) vs SET POZIOM IZOLACJI TRANSAKCJI CZYTAJ NIEZAKOŃCZONY

  3. Różnica między JOIN a INNER JOIN

  4. Jak zainstalować tylko składnik SQL Server Management Studio 2008

  5. SQL SELECT z procedurą składowaną i parametrami?