मुझे लगता है कि आप ऐसा करने के लिए बाएं जुड़ने का उपयोग कर सकते हैं। इस क्वेरी को आज़माएं, आपके नमूना डेटा के साथ यह ApprovedQty
को छोड़कर, वांछित आउटपुट उत्पन्न करता है , लेकिन मुझे समझ नहीं आता कि आप 12
. पर कैसे पहुंचे उसके लिए नमूना डेटा के साथ:
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
यह आउटपुट होगा:
LOTQty ApprovedQty DispatchDate Installed
20 6 2013-08-07 5