|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() |
Bonsoir !
Voilà mon cas !! J'obtiens la valeur d'un champ nom_image avec un decode : Code :
decode(champ1, '', '', 1, champ2) nom_image Pour cela je n'ai pas trouvé d'autre solution que de réutiliser un decode. Ce qui fait 2 decode imbriqués : Code :
En plus ce n'est qu'une partie d'une looooongue requête et ça complique les choses je pense.* Pouvez vous m'aider ? Est-ce qu'il y a une meilleure option que le decode ? Ou bien le group by peut être facilement écrit ? Merci ! |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Decode est une très vieille fonction remplacée depuis des lustres par CASE.
Votre première partie n'est nulle que si champ1 est nul, est différent de 1 ou si champ1 vaut 1 et champ2 est nul. Il suffit donc de l'écrire : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#3 |
|
Membre émérite
![]() Tony Développeur .NET Inscription : novembre 2010 Messages : 570 ![]() |
Dans le group by, comme dans le order by, on peut écrire l'index de la colonne (peut être pas sur tous les SGBD)
En général quand je fais un CHAR ou un TRIM par exemple, je fauis GROUP BY 1, 2 plutôt que GROUP BY TRIM(champs1), CHAR(champs2)
__________________
Le Porc est un loup pour le Porc. |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() |
Merci à tous les 2, je vais tester ça immédiatement !
Oui asmduty on peut faire ça et c'est une bonne idée, ma chef le fait souvent et moi je n'y pense jamais !!! |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
Je ferai très attention quand à l'utilisation de GROUP BY 1, 2. Il arrivera un moment où un developpeur rajoutera une colonne dans le select et ne se préocupera pas de l'order by ..et la c'est le drame :p |
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Tony Développeur .NET Inscription : novembre 2010 Messages : 570 ![]() |
Ouais enfin bon, si le développeur ne s'en préoccupe pas c'est qu'il ne fait pas correctement son boulot.
Et avec le group by c'est pire, car s'il rajoute un champs dans la sélection et pas dans le gorup by, ça plantera de toute manière (sauf fonction) vu que tous le champs du select doivent être dans le group by.
__________________
Le Porc est un loup pour le Porc. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
C'est un risque, comme les jointures non normalisées, d'erreur.
A partir de là vous avez le choix entre imposer une syntaxe qui comporte moins de risque ou pas. Et selon la taille des équipes et du projet... moins y a de risque et moins y aura de potetiel erreur de regréssion comme celle-ci. Après vous faites comme bon vous semble ça ne me dérange aucunement ! |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 099 ![]() |
Qui plus est, une requête qui plante est plus "visible" dans les tests qu'un mauvais tri...
Tatayo. |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() |
Je ne m'en sors pas j'ai toujours l'erreur ORA-00937
Quand je fais la requête toute simple, cela fonctionne. Mais quand j'intègre le tout cela fait 27 champs à récupérer et 32 dans le groupe by avec les decode et cela me renvoie l'erreur ORA-00937. Que ce soit en faisant : Code :
GROUP BY champ1, champ2, ..., champ 32 |
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
bonjour,
http://ora-00937.ora-code.com/ L'erreur est claire vous avez oubliez des colonnes dans la clause group by, ou vous avez oubliez d'utiliser une fonction d'agrégation sur une des colonnes du select. |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() |
En effet dans mon SELECT j'ai :
etc Comment faire alors ? ... |
|
|
01
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Sans la requete que vous utilisez on ne peut pas deviner
|
|
|
10
|
|
|
#13 |
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Selon le fonctionnel qui est derrière, on peut aussi se contenter d'un group by champs1, champs2.
|
|
|
00
|
|
|
#14 | ||
|
Membre du Club
![]() |
Voilà une version + simple mais qui génère l'erreur !
Code :
|
||
|
|
00
|
|
|
#15 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
Pour moi votre group by ne devrait avoir que : "id_image, id_dossier, code_image" Le reste de vos colonnes dans le select sont encadrées par la fonction d'agrégation MAX |
|
|
10
|
|
|
#16 |
![]() ![]() |
Un MAX de MAX, dans le cas présent, ce n'est pas valable.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#17 | ||
|
Membre du Club
![]() |
J'ai corrigé :
Code :
|
||
|
|
00
|
|
|
#18 | |
|
Membre du Club
![]() |
Citation:
Code :
GROUP BY id_image, id_dossier, code_image |
|
|
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
c'est que votre requête simplifiée ne reflète pas la requête réel (vous parliez de 27 colonnes dans le select et 32 dans le group by..)
|
|
|
00
|
|
|
#20 | ||
|
Membre du Club
![]() |
Voici ma requête complète :
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com