Решение DrJokepu в порядке, но это зависит от того, исправлено ли то, что вы называете «Изменения» в своем вопросе. I.e .: Вы всегда будете менять +1 для 2-го столбца? Или эти изменения «динамичны» таким образом, что вам нужно определить время выполнения, которое вы собираетесь применить?
В DB2 и любых других конструкциях SQL (например, вставка в DB2) или SELECT INTO для MS-SQL, которые позволят вам построить набор запросов.
Если я не ошибаюсь, вы хотите сделать это:
- Вставьте некоторые значения в таблице, которые приходят из избранных (то, что вы называете «старый»)
- Создать другой набор записей (как «старые»), но изменяют их значения.
Или, может быть, вы просто хотите, чтобы сделать номер 2.
номер 1 легко, как докторJokepu уже показал вам:
INSERT INTO <table> (values) SELECT "values" FROM <anotherTable>;
номер 2 вы всегда можете сделать в том же запросе, добавляя изменения, как вы выберите:
INSERT INTO MDSTD.MBANK (MID, MAGN, MAAID, MTYPEOT, MAVAILS, MUSER, MTS)
SELECT
MID
,MAGN + 1
,0 as MAAID
,MTYPEOT
,'A' as MAVAILS
,MUSER
,GETDATE()
FROM mdstd.mbank
WHERE MTYPEOT = '2' and MAVAILS = 'A'
(обратите внимание на GETDATE() является функцией MS-SQL, На данный момент я не помню точной функции для DB/2).
Остается один вопрос, в вашем примере вы упомянули:
«New = A Старый = O»
Если старые изменения в «O», то вы действительно хотите изменить первоначальную строку? ответ на этот вопрос зависит от точной задачи, которую вы хотите выполнить, что до сих пор неясно для меня.
Если вы хотите дублировать строки и изменять «копии» или копировать их и изменять оба набора (старые и новые), но используя разные правила.
UPDATE После перечитывать свой пост Я понимаю, что вы хотите сделать это:
- Дублировать набор записей (фактически копируя их), но изменяя их значения.
- Изменить исходный набор записей , прежде чем вы дублируетесь их
Если это так, то я не думаю, что вы можете сделать это в «два» запросах, потому что у вас не будет никакой возможности знать, что такое старая строка, и что нового, если вы уже дублировали.
Действительный вариант - создать временную таблицу, скопировать туда строки (изменить их как «новые») с запросом, который я предоставил). Затем в исходной таблице выполните «обновление» (используя тот же WHERE CLAUSE, чтобы убедиться, что вы изменяете одни и те же строки), обновите «старые» значения тем, что вы хотите обновить, и, наконец, вставьте новые обратно в исходную таблицу (что мы назвали «новым»), которые уже изменены. Наконец, падение временной таблицы.
Уф!
Звучит странно, но если мы не говорим о несметных записях каждой минуты, это должно быть своим родом быстрой работы.
Не могли бы вы объяснить свою идею немного больше? Небольшой образец поможет. Вы можете использовать SELECT INTO (и формировать свой выбор/в соответствии с вашими пожеланиями), но если вам нужно изменить «оригинальную» таблицу, вам понадобится хранимая процедура в DB2. –