|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2006 Messages : 8 ![]() |
Salut à tous, je travaille sous Oracle depuis quelques mois, et j'ai besoin d'aide.
Voilà mon problème: dans une application, j'utilise le "case when" avec plusieurs when dans le case, et chacun utilisant plusieurs variables. Je me suis rendu compte qu'à la fin d'un when, il y avait un break implicite et que le traitement du case se terminait. Or, j'aurai besoin que tous les when du case soient parcourus. Est ce qu'il existe un moyen (dans le genre du case) pour faire ce que je veux? Merci d'avance Virginie |
|
|
00
|
|
|
#2 | ||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
Bonjour,
A ma connaissance on n'a pas besoin d'un break dans un select case c'est a dire s'il vérifie la condition du when il va éxecuter la clause then sinon il va éxecuter la partie sinon, comme vous pouvez le voir dans l'exemple ci-dessous Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2006 Messages : 8 ![]() |
Bonjour,
je pense qu'un petit exemple sera plus explicite que mes explications. Imaginons une table 'PERSONNE' avec comme proprietes: - civilite ('M' ou 'Mme') - adulte (0 ou 1) -couleur des cheveux ('NOIR', 'BLOND', 'ROUX') (c'est simplifié à l'extreme) Dans mon traitement, je fait un truc du genre: select[...] case when civilite='M' and adulte=1 then 'HommeAdulte' when civilite='M' and cheveux='NOIR' then 'HommeChNoir' when civilite='M' then 'TotalHomme' end RepartitionPersonne, [...] Si je fais ce traitement, et qu'une personne correspond au premier when, elle ne sera pas prise en compte dans mon total, car une condition sera vérifiée, le then sera aplliqué et se sera la fait du case. Or, je cherche quelque chose qui me permette de faire tous les when, pour poouvoir vérifier, le cas echeant, toutes les conditions. J'espère avoir été un peu plus précise sur mon pb, et ce que je cherche. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Expert Datawarehouses + BO (sur BDD Oracle et SQL Server) Inscription : mars 2003 Messages : 645 ![]() |
alors il faut autant de CASE WHEN que d'occurences ?
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : avril 2006 Messages : 8 ![]() |
Je ne sais pas, j'y ai bien pensée, mais je ne sais pas si ça correspond avec ce que je veux, parce qu'il faut que, pour reprendre l'exemple, 'HommeAdulte', 'HommeChNoir', et 'TotalHomme' soient dans la meme colonne 'RepartitionPersonne', et j'ai peur, en mettant plusieurs case when, qu'il y ait plusieurs colonnes 'RepartitionPersonne'.
|
|
|
00
|
|
|
#6 | ||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
Bonjour ,
Donc si j'ai bien compris tu n'as pas besoin de mettre le tout dans un case, alors il faut eclater ce dernier Code :
|
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : avril 2006 Messages : 8 ![]() |
Voici l'exemple complété:
select[...], case when civilite='M' and adulte=1 then 'HommeAdulte' when civilite='M' and cheveux='NOIR' then 'HommeChNoir' when civilite='M' then 'TotalHomme' end RepartitionPersonne, count(*) valeur from PERSONNE, d'autres tables Where ... UNION SELECT [...], 'HommeAdulte' Repartition Personne, valeur from PERSONNE, d'autres tables Where ... UNION Where ... UNION SELECT [...], 'HommeChNoir' Repartition Personne, valeur from PERSONNE, d'autres tables Where ... UNION SELECT [...], 'TotalHomme' Repartition Personne, valeur from PERSONNE, d'autres tables Where ... Donc, je vais avoir: RepartitionPersonne valeur HommeAdulte 2 HommeChNoir 1 TotalHomme 5 Je pourrai faire plusieurs case en leurs donnant plusieurs noms, et appeler l'un puis l'autre, mais une partie du code est généré en java, en appelant toujours la meme fonction |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : avril 2006 Messages : 8 ![]() |
Je vous remercie pour les idées que vous m'avez donné, je teste demain, et je vous tiens au courant.
Bonne soirée |
|
|
00
|
|
|
#9 | ||||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
Salut,
le résultat souhaité Code :
Code :
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com