DrJokepu solution est ok, mais cela dépend si ce que vous appelez "Changes" dans votre question, est corrigé. I.e .: allez-vous toujours changer +1 pour la 2ème colonne? Ou ces changements sont-ils «dynamiques» d'une manière que vous devez décider lors de l'exécution quels changements vous allez appliquer?
Il existe dans DB2 et d'autres constructions SQL différentes (comme l'insertion dans DB2) ou SELECT INTO pour MS-SQL qui vous permettra de construire un ensemble de requêtes.
Si je ne me trompe pas, vous voulez faire ceci:
- Insertion de valeurs dans une table qui proviennent d'une sélection (ce que vous appelez « vieux »)
- Créer un ensemble d'enregistrements (comme les "anciens") mais modifient leurs valeurs.
Ou peut-être vous voulez juste faire le numéro 2.
Numéro 1 est facile, comme le DrJokepu déjà vous a montré:
INSERT INTO <table> (values) SELECT "values" FROM <anotherTable>;
Numéro 2, vous pouvez toujours faire la même requête, en ajoutant les modifications que vous sélectionnez:
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'
(notez le GETDATE() est une fonction MS-SQL, Je ne me souviens pas de la fonction exacte pour DB/2 en ce moment).
Une question reste, dans votre exemple vous avez mentionné:
"Nouveau = A Old = O"
Si anciens changements "O", alors vous voulez vraiment changer la ligne d'origine? la réponse à cette question dépend de la tâche exacte que vous voulez accomplir, ce qui n'est toujours pas clair pour moi.
Si vous souhaitez dupliquer les lignes et modifier les "copies" ou les copier et modifier les deux ensembles (anciens et nouveaux) mais en utilisant des règles différentes.
MISE À JOUR Après avoir relu votre message, je comprends que vous voulez faire ceci:
- dupliquer un ensemble d'enregistrements (les copier efficacement) mais modifier leurs valeurs.
- Modifier l'ensemble des documents originaux avant vous les dupliquées
Si tel est le cas, je ne pense pas que vous pouvez le faire dans les requêtes « deux », parce que vous aurez aucun moyen de savoir quelle est la vieille rangée et quelle est la nouvelle si vous avez déjà dupliqué.
Une option valide est de créer une table temporaire, copiez les lignes là (les modifier comme les "nouveaux") avec la requête que j'ai fournie) Puis dans la table d'origine, exécutez une "mise à jour" (en utilisant le même WHERE CLAUSE pour vous assurer que vous modifiez les mêmes lignes), mettez à jour les "anciennes" valeurs avec tout ce que vous voulez mettre à jour et enfin insérez les nouvelles dans la table d'origine (ce que nous appelons "new") déjà modifiées. Enfin, laissez tomber la table temporaire.
Ouf!
sons bizarres, mais à moins que nous parlons zillions de dossiers chaque minute, cela devrait être une sorte d'opération rapide.
Pouvez-vous expliquer un peu plus votre idée? Un petit échantillon aidera. Vous pouvez utiliser SELECT INTO (et façonner votre select/into comme vous le souhaitez), mais si vous avez besoin de modifier la table "original", vous aurez besoin d'une procédure stockée dans DB2. –