[SQL] Decode, Case et GroupBy
Résolu/Fermé
A voir également:
- Sql decode
- Comment decode - Guide
- Logiciel sql - Télécharger - Bases de données
- Sql replace plusieurs valeurs - Forum Programmation
- Requete sql pix - Forum PHP
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
4 réponses
sandul
Messages postés
3927
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
723
9 déc. 2008 à 17:04
9 déc. 2008 à 17:04
Salut,
Not a group by <== pour pouvoir faire un select avec une clause group by à la fin, on a le droit a utiliser dans la partie champs sélectionnés uniquement:
- des (pseudo)colonnes obtenues via des opérations mathématiques sur le résultat (AVG, MIN, MAX, SUM, etc)
- des colonnes individuelles mais déclarées par la suite dans la clause group by
Comme je ne vois pas de section en gras, je ne sais pas ce que tu as essayé d'enlever.
++
Not a group by <== pour pouvoir faire un select avec une clause group by à la fin, on a le droit a utiliser dans la partie champs sélectionnés uniquement:
- des (pseudo)colonnes obtenues via des opérations mathématiques sur le résultat (AVG, MIN, MAX, SUM, etc)
- des colonnes individuelles mais déclarées par la suite dans la clause group by
Comme je ne vois pas de section en gras, je ne sais pas ce que tu as essayé d'enlever.
++
Lorsque j'enlèves les deux occurences suivantes, ca marche :
DECODE(T_TYPE_INDIC.LIB_TYPE_INDIC,'Sortants DAC',CASE WHEN T_FLUX.FLUX IN (SELECT T_FLUX.FLUX FROM T_FLUX WHERE T_FLUX.TYPE_INDIC_AUTRES=1) THEN 'Sortants Otres' ELSE 'Sortants DhAC' END,T_TYPE_INDIC.LIB_TYPE_INDIC),
sandul
Messages postés
3927
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
723
9 déc. 2008 à 17:21
9 déc. 2008 à 17:21
Je n'arrive pas trop à suivre ton decode. La syntaxe tordue amène qqhose par rapport à ceci https://www.techonthenet.com/oracle/functions/decode.php ?
Sinon, en règle générale, voici un exemple de requ^te qui marche:
==> tu remarques que dans la section group by je ne reprends pas la clause decode entièrement, mais uniquement la colonne concernée.
++
Sinon, en règle générale, voici un exemple de requ^te qui marche:
SELECT taskid, MAX (schedbegdate), DECODE (deplan_reason, 1, 'one', 2, 'two') FROM tasko GROUP BY taskid, deplan_reason
==> tu remarques que dans la section group by je ne reprends pas la clause decode entièrement, mais uniquement la colonne concernée.
++
Ok, je comprend la syntaxe mais ca ne marche pas, toujours la meme erreur au niveau du GROUP BY.
La syntaxe du décode est tordue en effet et peut etre y a til une syntaxe plus simple.
Je cherche à modifier des libellés "Sortants DAC" en autre chose SEULEMENT SI le flux en question à un indicateur_autre à 1. Il peut il avoir plusieurs flux.
est il possible d'écrire un DECODE :
DECODE(expr,search,result,défault)
avec en <search>, une requête retournant plusieurs valeurs ?
La syntaxe du décode est tordue en effet et peut etre y a til une syntaxe plus simple.
Je cherche à modifier des libellés "Sortants DAC" en autre chose SEULEMENT SI le flux en question à un indicateur_autre à 1. Il peut il avoir plusieurs flux.
est il possible d'écrire un DECODE :
DECODE(expr,search,result,défault)
avec en <search>, une requête retournant plusieurs valeurs ?
sandul
Messages postés
3927
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
723
9 déc. 2008 à 18:22
9 déc. 2008 à 18:22
est il possible d'écrire un DECODE :
DECODE(expr,search,result,défault)
avec en <search>, une requête retournant plusieurs valeurs ? <== oui, bien sûr.
Vérifie bien que toutes les colonnes utilisées dans la clause DECODE sont bien présentes dans la partie GROUP BY. Par exemple, il me semble que pour
T_FLUX.FLUX
ce n'est pas le cas. Attention, si tu fais une jointure, il faut que le colonne utilisée dans DECODE se retrouve exactement (i.e. même table!) dans la clause GROUP BY.
==> T.INDIC.FLUX ne couvre pas T_FLUX.FLUX ci-dessus !
DECODE(expr,search,result,défault)
avec en <search>, une requête retournant plusieurs valeurs ? <== oui, bien sûr.
Vérifie bien que toutes les colonnes utilisées dans la clause DECODE sont bien présentes dans la partie GROUP BY. Par exemple, il me semble que pour
T_FLUX.FLUX
ce n'est pas le cas. Attention, si tu fais une jointure, il faut que le colonne utilisée dans DECODE se retrouve exactement (i.e. même table!) dans la clause GROUP BY.
==> T.INDIC.FLUX ne couvre pas T_FLUX.FLUX ci-dessus !