Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abgleich von Daten aus drei Tabellen in Sql Server 2008

Ich denke, Sie könnten linke Verknüpfungen verwenden, um dies zu tun. Probieren Sie diese Abfrage aus, mit Ihren Beispieldaten erzeugt sie die gewünschte Ausgabe, mit Ausnahme von ApprovedQty , aber ich verstehe nicht, wie Sie zu 12 gekommen sind dazu mit den Beispieldaten:

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

dies würde ausgeben:

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