Problème SQL avec conditions sur un UPDATE
Bonjour,
Je suis un peu rouillé en SQL alors je viens chercher un peu d'aide.
SGBD = Oracle 10
Voilà le code simplifié de départ :
Code:
1 2 3 4 5
| UPDATE table1 a SET a.champ1=
(SELECT a.champ2*COUNT(*)
FROM table2 b
WHERE contraintes);
COMMIT; |
("contraintes" remplace de façon schématique toutes les conditions where qui se trouve dans mon script)
Mais suite à une modification, ce code doit être valable seulement pour mes données avant 2008. A partir de 2008, il faut donc que je précise une condition :
- pour date<=2007 alors script normal
- pour date >= 2008 alors script modifié
J'ai donc fait ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| UPDATE table1 a SET a.champ1=
(SELECT a.champ2*count(*)
FROM table2 b
WHERE contraintes
AND b.date<=2007);
COMMIT;
UPDATE table1 a SET a.champ1=
(SELECT a.champ2*count(*)
FROM table2 b
WHERE contraintes
AND b.date>=2008 AND b.type<>'Ancien');
COMMIT;[/COLOR] |
Mais le premier update est écrasé par le second et je n'obtiens au final qu'une mise à jour de mon champ a.champ1 pour la date>=2008. Le champ est null pour la date<=2007.
Comment puis-je faire en sorte de faire la mise à jour pour l'ensemble de mes données (toutes les dates) avec les 2 traitements spécifiques ? Je pense qu'il faut mettre en place une contrainte mais je ne vois pas vraiment comment ?
Toute aide sera la bienvenue Merci d'avance !