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
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
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
11 déc. 2019 à 12:06
bonjour, quelle documentation utilises-tu?
as-tu essayé de mettre le
as-tu essayé de mettre le
group byavant le
order by?
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
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
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
12 déc. 2019 à 10:10
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
12 déc. 2019 à 11:43
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.