如果以前的值为空,则更新列

时间:2013-02-20 15:29:39

标签: sql loops null db2 sql-update

我正在使用DB2 SQL。我有一个表名ITEMATRIX,看起来像 -

ITNBR   LBRCST  MFGOH   STDUC   YRMNT
RM-013         0    0   499.6   2010-02
H-178          0    0   164.5   2010-02
FP9-003        0    0   6       2010-02
FP9-059        0    0   2       2010-02
A94-103B-M     0    0   0       2010-02
140-07-1012C   0    0   10      2010-05
140-07-1012C   0    0   0       2010-06

然后

 ITNBR  LBRCST  MFGOH   STDUC   YRMNT
 140-07-1012C   0   0   10      2010-05
 140-07-1012C   0   0   **10**      2010-06
等等......

我想更新STDUC字段,如果值为0或Null to value存在于最近的月份。让我们说ItNBR 140-07-1012C STDUC 0 2010-052010-04,那么首先我必须找到该项目编号在2010年是否有标准费用对于任何月份,如果是,则将上个月的值{{1}}复制到其中。有许多记录具有相同的项目编号,我稍后会进行转置。谁能给我一些如何解决这个问题的想法?

由于 VARUN

3 个答案:

答案 0 :(得分:0)

我认为他遵循的是你想要的逻辑:

update itematrix
    set stduc = (select stduc
                 from itematrix im2
                 where im2.stduc <> 0 and im2.stduc is not null and im2.itnbr = itematrix.itnbr
                 order by yrmnt desc
                 fetch first 1 row only
                )
    where stduc is null or stduc = 0

我没有在DB2中测试过这个。在与更新中使用的表相同的表上使用fetch first可能会出现问题。我发现documentation含糊不清。

如果您不需要实际更新,但只想查看该值,请尝试:

select itemmatrix.*,
       (select stduc
        from itematrix im2
        where im2.stduc <> 0 and im2.stduc is not null and im2.itnbr = itematrix.itnbr
        order by yrmnt desc
        fetch first 1 row only
       )
from itemmatrix

答案 1 :(得分:0)

答案 2 :(得分:0)

我将流程转移到EXCEL,并且可以使用IFVLOOKUP轻松地从最早的月份开始使用单个成本值,然后简单地比较上个月的值并相应地更改然后创建使用UPDATE的{​​{1}}语句。我将流程转移到EXCEL,可以使用&IF轻松完成,然后使用{{1}创建VLOOKUP语句}。