日期:2014-05-18 浏览次数:20419 次
cust_code order PN nums date MTPZZ 026308-01 AFE4-1975-1A 20 2011-1-2 MTPZZ 026308-02 AFE4-1975-1A 25 2011-5-2 null null AFE4-1975-1A 32 null CMPZZ 026557-01 AFE4-1235-1A 36 2011-4-10 CMPZZ 026316-01 AFE4-1235-1A 100 2011-4-13 null null AFE4-1235-1A 50 null ........ 因上面的结果导致我无法根据 cust_code过滤出为空的 PN。 故我想得到如下结果: cust_code order PN nums date MTPZZ 026308-01 AFE4-1975-1A 20 2011-1-2 MTPZZ 026308-02 AFE4-1975-1A 25 2011-5-2 MTPZZ null AFE4-1975-1A 32 null CMPZZ 026557-01 AFE4-1235-1A 36 2011-4-10 CMPZZ 026316-01 AFE4-1235-1A 100 2011-4-13 CMPZZ null AFE4-1235-1A 50 null ........ 这样我就能用cust_code 过滤本来为空的记录了。 根据 PN值相同的,将 cust_code 为空的记录,用PN值相同的记录对应的cust_code的值填充。 请问SQL如何实现? 另外,如果要将为null 的记录与相同PN值的记录相加又如何实现?要求null值要与日期最近的那条记录相加。
select a.cust_code,a.[order],a.pn, (case when a.px=1 then a.nums+isnull(b.nums,0) else a.nums end) nums, a.date from ( select *,px=row_number() over (partition by pn order by date desc) from tb ) a left join ( select * from tb where cust_code is null ) b on a.pn = b.pn
------解决方案--------------------
select (case when cust_code is null then (select top 1 cust_code from tb where pn =t.pn) else cust_code end) cust_code, [order],pn,nums,date from tb t
------解决方案--------------------