Обновление DB2 с порядковым номером, но увеличивается только при возникновении условия
У меня есть такой стол
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 create 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
Можно ли это сделать в одном обновлении? Я использую это как встроенный SQL в программе SQLRPGLE.
Заранее спасибо за помощь
1 ответ
Объединить в MYLIB.MYTABLE от
используя (SELECT A, B, 'SP'||LPAD((ROW_NUMBER() OVER ()),5,'0')
ROWNUM
ИЗ MYLIB.MYTABLE группы по a, b
заказать по, б
) как nt (a, b, rownum)
на ot.a = nt.a и ot.b=nt.b
когда соответствует
обновить набор d=nt.rownum
иначе игнорируй