带有序列号的DB2更新,但仅在条件发生时增加

时间:2017-02-10 15:37:14

标签: sql db2 ibm-midrange rpgle

我有一张表,例如

A      B          C         D
32     6100812    778899    123
32     6100812    778593    123
32     6100812    458962    123
33     8000812    885522    P111118
33     8000812    885537    P111118
32     6100915    990011    AA456
32     6100915    789684    AA456
32     6100915    485217    AA456

需要使用我可以创建的连续数字对C列执行更新 使用DB2函数创建Sequence。问题是我需要保留这个数字 来自增量而A列和B列不会改变它们的值。

到目前为止,我有:

create sequence renumber
   start with 1
   increment by 1
   no maxvalue
   no cycle;

Update MYLIB.MYTABLE
Set
   C = 'SP' || lpad((nextval for renumber),5,'0') ;

drop sequence renumber;

所以,我得到:

A      B          C         D
32     6100812    778899    SP00001
32     6100812    778593    SP00002
32     6100812    458962    SP00003
33     8000812    885522    SP00004
33     8000812    885537    SP00005
32     6100915    990011    SP00006
32     6100915    789684    SP00007
32     6100915    485217    SP00008

虽然我真正需要的是:

A      B          C         D
32     6100812    778899    SP00001
32     6100812    778593    SP00001
32     6100812    458962    SP00001
33     8000812    885522    SP00002
33     8000812    885537    SP00002
32     6100915    990011    SP00003
32     6100915    789684    SP00003
32     6100915    485217    SP00003

这可以在一次更新中完成吗? 我在SQLRPGLE程序中使用它作为嵌入式SQL。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

合并到MYLIB.MYTABLE ot
使用(选择A,B,' SP' || LPAD((ROW_NUMBER()OVER()),5,' 0')
        ROWNUM
         来自MYLIB.MYTABLE小组a,b
       按a,b排序

)作为nt(a,b,rownum)
在ot.a = nt.a和ot.b = nt.b
匹配时,然后
更新集d = nt.rownum
否则忽略