2017-02-10 16 views
1

У меня есть таблица, такие какобновление DB2 с Sequence Number, но только возрастает, когда состояние происходит

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 создать последовательность , Проблема в том, что мне нужно сохранить число от увеличения, в то время как столбцы 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.

Заранее спасибо за вашу помощь

+0

Можете ли вы использовать отдельную таблицу, которая имеет только отдельные значения столбцов A и B? Поместите свою последовательность # в эту таблицу и присоединитесь к ней. – Andrew

+0

Спасибо, что может оказаться полезным, но это добавит время работы к программе, так как я хотел бы создать таблицу для библиотеки QTEMP без данных, а затем заполнить ее отдельными (A, B) значениями, обновить последовательность и, наконец, обновить исходную таблицу через соединение. Я пытаюсь найти более прямой подход к задаче, учитывая, что программа будет использоваться часто. –

+1

Связанная таблица выглядит лучше всего. Теперь у вас будут столбцы (A, B) = (32, 6100812), а следующая - (33, 8000812). Но какая-то неизвестная будущая дата, таблица может содержать столбцы (A, B) = (32, 7777777). Последовательный столбец D будет либо навсегда сломан, либо каждая последующая строка должна быть каким-то образом увеличена на количество вставленных строк. Повторная архивация базы данных для удовлетворения реляционных концепций может сэкономить много будущих проблем и повысить производительность. – user2338816

ответ

2

сливаются в MYLIB.MYTABLE Ot
с помощью (SELECT A, B, 'СП' || LPAD ((ROW_NUMBER() OVER()), 5, '0')
ROWNUM
оТ MYLIB.MYTABLE группе а, б
порядка по а, б

), как нт (а, б, RowNum)
на ot.a = nt.a и ot.b = nt.b
при согласовании затем
набор обновлений d = nt.rownum
else ignore