Pb de Group BY avec CASE + Order BY [Résolu]

Signaler
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020
-
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020
-
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

Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659
bonjour, quelle documentation utilises-tu?
as-tu essayé de mettre le
group by
avant le
order by
?
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

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
Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659 >
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

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.
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

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