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 -
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"
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
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
as-tu essayé de mettre le
group byavant le
order by?
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
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
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"
Erreur à la ligne 13, colonne 15
Cdt
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.