Tôi nghĩ bạn có thể sử dụng các phép nối trái để làm điều này. Hãy thử truy vấn này, với dữ liệu mẫu của bạn, nó tạo ra kết quả mong muốn, ngoại trừ ApprovedQty
, nhưng tôi không hiểu bằng cách nào bạn đến 12
cho điều đó với dữ liệu mẫu:
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
điều này sẽ xuất ra:
LOTQty ApprovedQty DispatchDate Installed
20 6 2013-08-07 5