sql >> Databáze >  >> RDS >> Sqlserver

Odpovídající data ze tří tabulek v SQL Server 2008

Myslím, že byste k tomu mohli použít levá spojení. Zkuste tento dotaz, s vašimi ukázkovými daty vytvoří požadovaný výstup, kromě ApprovedQty , ale nechápu, jak jste přišli na 12 za to s ukázkovými daty:

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

výsledkem by bylo:

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



  1. PostgreSQL - Získávání statistických dat

  2. Java-Mysql - Přístup odepřen pro uživatele 'root'@'localhost' (pomocí hesla:ANO)

  3. Odstranění opakovaných duplicitních znaků

  4. Proč null||null vrací hodnotu null, ale concat(null,null) vrací prázdný řetězec v postgresu?