Pb de Group BY avec CASE + Order BY

Résolu
JsuisNul Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   -  
JsuisNul Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, quelle documentation utilises-tu?
as-tu essayé de mettre le
group by
avant le
order by
?
1
JsuisNul Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   1
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > JsuisNul Messages postés 125 Date d'inscription   Statut Membre Dernière intervention  
 
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 125 Date d'inscription   Statut Membre Dernière intervention   1
 
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