sql >> Base de Datos >  >> RDS >> Sqlserver

Extraer datos de MS SQL Server-2008 haciendo referencia a varias tablas

Continuando con la consulta anterior, creo que las nuevas columnas podrían agregarse con una agregación condicional en la declaración de selección y otra combinación izquierda para la tabla fallida.

Esto debería funcionar, pero estoy seguro de que la consulta se puede mejorar:

select 
    d.LOTQty, 
    ApprovedQty = count(d.SerialNo),
    d.DispatchDate,
    Installed = count(a.SerialNo) + count(r.NewSerialNo),
    DOA    = sum(case when datediff(day, coalesce(a.ActivationDate,r.RecordDate), f.FailedDate) <= 10 then 1 else 0 end),
    Bounce = sum(case when datediff(day, coalesce(a.ActivationDate,r.RecordDate), f.FailedDate) between 11 and 180 then 1 else 0 end)
from 
    Despatch d 
left join 
    Activation a 
     on d.SerialNo= a.SerialNo
    and d.DispatchDate <= a.ActivationDate 
    and d.LOTQty = a.LOTQty
left join 
    Replaced r 
      on d.SerialNo= r.NewSerialNo
     and d.DispatchDate <= r.RecordDate
     and (a.ActivationDate is null or a.ActivationDate < d.DispatchDate)
left join 
    Failed f 
      on (f.FailedSINo = a.SerialNo)
      or (f.FailedSINo = r.NewSerialNo)     
where 
    d.LOTQty = 15
group by 
    d.LOTQty, d.DispatchDate

Fiddle SQL de muestra con datos de prueba