Решение DrJokepu в порядке, но это зависит от того, исправлено ли то, что вы называете «Изменения» в вашем вопросе. Т.е .: вы всегда собираетесь менять +1 для 2-го столбца? Или эти изменения являются «динамическими» таким образом, что вы должны решить во время выполнения, какие изменения вы собираетесь применить?
Есть в DB2 и любых других SQL-конструкциях (например, вставка в DB2) или SELECT INTO для MS-SQL, которые позволят вам создать набор запросов.
Если я не ошибаюсь, вы хотите сделать это:
- Вставьте некоторые значения в таблицу, которые происходят из выбора (что вы называете "старым")
- Создайте другой набор записей (например, «старые»), но измените их значения.
Или, может быть, вы просто хотите сделать номер 2.
Номер 1 прост, как доктор Джокепу уже показал вам:
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).
Остается один вопрос, в вашем примере вы упомянули:
"Новый = Старый = O"
Если Old изменится на «O», то вы действительно хотите изменить исходную строку? Ответ на этот вопрос зависит от того, какую именно задачу вы хотите выполнить, что мне до сих пор не ясно.
Если вы хотите продублировать строки и изменить «копии» или скопировать их и изменить оба набора (старый и новый), но по другим правилам.
UPDATE
Перечитав ваш пост, я понимаю, что вы хотите сделать это:
- Дублируйте набор записей (фактически копируя их), но изменяя их значения.
- Измените исходный набор записей до того, как вы продублировали их
Если это так, я не думаю, что вы можете сделать это в «двух» запросах, потому что у вас не будет возможности узнать, какая старая строка и какая новая, если вы уже продублировали.
Допустимый вариант - создать временную таблицу, скопировать туда строки (изменить их как «новые» с помощью предоставленного мной запроса). Затем в исходной таблице выполнить «обновление» (используя тот же WHERE. CLAUSE, чтобы убедиться, что вы изменяете те же строки), обновите «старые» значения тем, что вы хотите обновить, и, наконец, вставьте новые значения в исходную таблицу (то, что мы назвали «новыми»), которые уже изменены.
Наконец, удалите временную таблицу.
Уф!
Звучит странно, но если мы не говорим о миллионах записей каждую минуту, это должна быть какая-то быстрая операция.