2011-06-29 3 views
5

mam tej kwerendyWymień wartości null w prawo sprzężenia zewnętrznego z poprzednim not null dopasowane rzędu

select a.WeekNumber 
     ,a.filedate 
     ,a.customer 
     ,material 
     ,Quantity 
from zfmon zf right outer join zfmonTemp a 
on zf.customer = a.customer 
     and zf.filedate = a.filedate 
     and zf.material = 'AD215BY' 

Zwraca następujące

WeekNumber FileDate     Customer Material Quantity 
1   2010-03-19 00:00:00.000 1008777 NULL  NULL 
2   2010-03-12 00:00:00.000 1008777 AD215XX 3 

Co chcę jest, gdy materiał jest null zastąpić to z następną wartością null. W tym przypadku byłoby zastąpić go AD215XX

Dlatego wyjście będzie wyglądać

WeekNumber FileDate     Customer Material Quantity 
1   2010-03-19 00:00:00.000 1008777 AD215XX NULL 
2   2010-03-12 00:00:00.000 1008777 AD215XX 3 

Czy jest to możliwe do zrobienia? Czy ktoś może mi pomóc?

Dzięki Eli

Odpowiedz

1
select a.WeekNumber 
     ,a.filedate 
     ,a.customer 
     ,isnull(material, (select top 1 material from zfmonTemp where weeknumber > zf.weeknumber and material is not null order by weeknumber)) material 
     ,Quantity 
from zfmon zf right outer join zfmonTemp a 
on zf.customer = a.customer 
     and zf.filedate = a.filedate 
     and zf.material = 'AD215BY' 
+1

Prawdopodobnie trzeba Lomit się podselekcji w przypadku, gdy istnieje więcej niż jeden rząd z większą weeknumber? – StevieG

+0

@StevieG - Oups! Tak masz rację. – CristiC

+0

Dzięki za odpowiedź, ale to nie zadziałało. weeknumber nie jest polem w zfmon, ale jest w zfmonTemp. Oto struktury tabel: Zfmon ma (filedate, klient, materiał, ilość) i ZfmonTemp ma (filedate, customer, weeknumber) – Elias

0
set @material = 'AD215BY'; 
select a.WeekNumber 
     ,a.filedate 
     ,a.customer 
     ,coalesce(zf.material, @material) as Material 
     ,zf.Quantity 
from zfmon zf right outer join zfmonTemp a 
on zf.customer = a.customer 
     and zf.filedate = a.filedate 
     and zf.material = @material