sql >> Database >  >> RDS >> Sqlserver

Overeenkomende gegevens uit drie tabellen in SQL Server 2008

Ik denk dat je hiervoor left joins kunt gebruiken. Probeer deze query, met uw voorbeeldgegevens produceert het de gewenste uitvoer, behalve de ApprovedQty , maar ik snap niet hoe je bij 12 bent gekomen daarvoor met de voorbeeldgegevens:

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

dit zou het volgende opleveren:

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



  1. syntaxisfout met update-query bij join met een tabel

  2. Regex verwijdert alle exemplaren van meerdere tekens in een tekenreeks

  3. Juiste query om het huidige aantal verbindingen in een PostgreSQL DB te krijgen

  4. Hoe blader ik door databases op een Oracle Server?