sql >> Base de Datos >  >> RDS >> Sqlserver

Coincidencia de datos de tres tablas en Sql Server 2008

Creo que podrías usar combinaciones izquierdas para hacer esto. Pruebe esta consulta, con sus datos de muestra produce el resultado deseado, excepto por ApprovedQty , pero no entiendo cómo llegaste a 12 para eso con los datos de muestra:

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

esto generaría:

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