Обновление 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
иначе игнорируй

Другие вопросы по тегам