2011-06-29 40 views
5

Tôi có truy vấn nàyThay thế các giá trị null trong quyền bên ngoài tham gia với một hàng không null xuất hiện trước

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' 

Nó trả về sau

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 

Những gì tôi muốn là khi nguyên liệu là null thay thế nó với giá trị không null tiếp theo. Trong trường hợp này nó sẽ thay thế nó với AD215XX

Do đó đầu ra sẽ trông giống như

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 

Là có thể làm gì? Ai có thể giúp tôi không.

Cảm ơn, Eli

Trả lời

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

Có lẽ cần phải lomit các subselect trong trường hợp có nhiều hơn 1 hàng với một weeknumber lớn hơn? – StevieG

+0

@StevieG - Oups! Vâng, bạn nói đúng. – CristiC

+0

Cảm ơn bạn đã phản hồi nhưng điều này không hoạt động. weeknumber không phải là một lĩnh vực trong zfmon nhưng nó là trong zfmonTemp. Dưới đây là các cấu trúc bảng: Zfmon có (tệp, khách hàng, tài liệu, số lượng) và ZfmonTemp có (nộp, khách hàng, tuần) – 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 
Các vấn đề liên quan