Bonjour à tous
Je penche sur un problème délicat.. Je cherche désespérément et teste plusieurs choses depuis ce matin, mais rien de fort concluant..

Je possède cette table "CONTRAT" (c'est une table d'essai, mais qui me sert pour faciliter l'explication ici, et le principe est le même que la table principale que je souhaite manipuler) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
      NUM LIBELLE               ID_CLIENT      COLSUP
--------- -------------------- ---------- -----------
        1 00Location                    1
        6 00Vente                       3
        7 00Cession                     5
L'idée serait par exemple d'insérer la valeur "OUI" dans la colonne "COLSUP" lorsque la ligne courante possède le libellé "00Cession" et lorsque l'ID client vaut "5".


/!\ IMPORTANT : Je ne veux pas faire quelque chose dans le style "...WHERE Libelle='00Cession' AND ID_client='5';" .. Ca serait trop simple Je recherche bien à le faire de manière conditionnelle (car la table finale que je dois manipuler comporte beaucoup de condition etc.. /!\


Imaginez que la table comporte beaucoup de lignes (ici c'est juste pour l'exemple).
J'ai donc créé cette requête, par le moyen de la fonction "decode" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
UPDATE contrat
set COLSUP=decode(LIBELLE,'00Cession',decode(
                                 (select ID_client 
                                  from contrat 
                                  where rownum<2),5,'OUI'));
Théoriquement ça paraît correcte.. Mais le soucis c'est qu'Oracle travaille comme ceci (du moins je crois) :
Apparemment il passe toutes les lignes les unes après les autres, et une fois à la 3ème ligne, il trouve bien "00Cession"! Jusque là pas de soucis! Seulement au moment de regarder l'ID_CLIENT, c'est L'ID de la première ligne qu'il regarde! Je n'obtiens donc jamais le mot "OUI" dans la 3ème ligne de la colonne "COLSUP"...

Je me demande donc comment dire à Oracle de toujours faire le select sur la valeur courante de la ligne (et non pas de reprendre la première à chaque fois)..
Je pense que le "rownum<2" est en cause, mais je ne vois pas par quoi le remplacer... J'ai pu lire de virer le "rownum<2" pour mettre un distinct après mon select, mais toujours le même problème..

Merci beaucoup