Pb de Group BY avec CASE + Order BY

Résolu/Fermé
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 11 déc. 2019 à 11:13
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 12 déc. 2019 à 14:28
Bonjour,

J'ai ma requête ci-dessous qui fonctionne très bien sauf lorsque j'essaye de mettre un group by.

Voila ma requête :

select p.cdcode , q.liblon, r.cdsire, r.cdsire||r.cdnics ,
case when t.nateta = '1' then 'Etablissement Siége' else '' end AS NatEtab,
case when t.nateta = '1' then r.cdnics else '' end AS Nic,
case when s.opt006 = '1' then 'AmAlsaceMoselle' else '' end AS AmAlsaceMoselle
From zy00 a, zy38 b, zd00 p, zd01 q, zdag r, zdf1 s, zd7r t
where a.nudoss = b.nudoss and b.idesta =p.cdcode and p.cdstco='DRE'
and p.nudoss=q.nudoss and p.nudoss=r.nudoss
and p.nudoss=s.nudoss and p.nudoss=t.nudoss
and b.dten00 > '01/01/2019'
order by p.cdcode,q.liblon,r.cdsire,r.cdsire||r.cdnics,NatEtab,Nic,AmAlsaceMoselle
group by p.cdcode,q.liblon,r.cdsire,r.cdsire||r.cdnics,NatEtab,Nic,AmAlsaceMoselle

Si je laisse uniquement le order by, il n'y a aucun problème j'obtiens bien un résultat mais des que je rajoute le group by j'ai un message d'erreur :

"ORA-00933: la commande SQL ne se termine pas correctement
00933. 00000 - "SQL command not properly ended"
  • Cause:
  • Action:

Erreur à la ligne 11, colonne 31"

J'ai essayer plusieurs solutions vu sur le net (mettre les CASE dans les clauses Order et Group BY, mettre les variable t.nateta, s.opt006 avec le Order By ça fonctionne mais pas avec le Group By ) sans succès.

Si quelqu'un a une idée.

Merci


Configuration: Windows / Firefox 71.0

2 réponses

yg_be Messages postés 23401 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 décembre 2024 Ambassadeur 1 557
11 déc. 2019 à 12:06
bonjour, quelle documentation utilises-tu?
as-tu essayé de mettre le
group by
avant le
order by
?
1
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
12 déc. 2019 à 10:10
Bonjour Yg_be,

Qu'entends tu par documentation ? j'utilise Sql Developer sur une base oracle si c'est ça ta question

J'ai essayer d'inverser et la mes alias ne sont plus reconnus...
ORA-00904: "AMALSACEMOSELLE" : identificateur non valide
00904. 00000 - "%s: invalid identifier"
  • Cause:
  • Action:

Erreur à la ligne 13, colonne 15

Cdt
0
yg_be Messages postés 23401 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 décembre 2024 1 557 > JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024
12 déc. 2019 à 11:43
Je me demandais quelle documentation, quel manuel, quel mode d'emploi tu utilisais. Je pense qu'il est bien partout bien indiqué que le group by doit précéder le order by.
Cela fonctionne donc mieux en mettant le group by avant le order by.
Tu constates maintenant que tu ne peux pas utiliser d'alias dans le group by: il faut simplement écrire le group by comme s'il n'y avait pas d'alias.
quand tu auras éliminé toutes les erreurs, le moment sera venu de se demander ce que tu essaies d'obtenir en utilisant un group by.
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
12 déc. 2019 à 14:28
En effet, je n'ai pas regarder la documentation sur ce point la vu que je connaisais déjà le Group By et l'Order By.... par contre je ne savais pas qu'il y avait un ordre à respecter... en tout cas cela m'est complétement sorti de la tête. Merci de me l'avoir appris ou de ma l'avoir rappelé.
Donc j'ai corrigé ma requêtes en modifiant l'ordre, et en remettant les "case" dans mon Order et Group By sans les alias.
et ça fonctionne !!!

Voila la requête corrigée :

select p.cdcode , q.liblon, r.cdsire, r.cdsire||r.cdnics ,
case when t.nateta = '1' then 'Etablissement Siége' else '' end AS NatEtab,
case when t.nateta = '1' then r.cdnics else '' end AS Nic,
case when s.opt006 = '1' then 'AmAlsaceMoselle' else '' end AS AmAlsaceMoselle
from zy00 a, zy38 b, zd00 p, zd01 q, zdag r, zdf1 s, zd7r t
where a.nudoss = b.nudoss and b.idesta =p.cdcode and p.cdstco='DRE'
and p.nudoss=q.nudoss and p.nudoss=r.nudoss
and p.nudoss=s.nudoss and p.nudoss=t.nudoss
and b.dten00 > '01/01/2019'
group by p.cdcode , q.liblon, r.cdsire, r.cdsire||r.cdnics ,
case when t.nateta = '1' then 'Etablissement Siége' else '' end ,
case when t.nateta = '1' then r.cdnics else '' end ,
case when s.opt006 = '1' then 'AmAlsaceMoselle' else '' end
order by p.cdcode , q.liblon, r.cdsire, r.cdsire||r.cdnics ,
case when t.nateta = '1' then 'Etablissement Siége' else '' end,
case when t.nateta = '1' then r.cdnics else '' end,
case when s.opt006 = '1' then 'AmAlsaceMoselle' else '' end

Merci beaucoup yg_be
0