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