Mettre tous les résultats sur une même ligne [Résolu]

Signaler
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020
-
JsuisNul
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020
-
Bonjour,

J'ai une requête sql ou je vais chercher à chaque fois 1 occurrence sur chaque information extraite sauf pour une information ou je dois extraire deux occurrences pour un même dossier.
J'ai utilisé des case en pensant que cela me permettrait d'obtenir mes résultats sur une seule ligne.
Finalement j'obtiens ceux-ci :

AAAA;BBBB;CCCC;null;EEEE
AAAA;BBBB;null;DDDD;EEEE

Avec CCCC et DDDD issue de la même information.
Est-ce que quelqu'un sait comment je peux faire pour avoir
AAAA;BBBB;CCCC;DDDD;EEEE

Ci-joint ma requête :

Select a.cdcode , b.liblon, c.cdsire, c.cdsire||c.cdnics ,f.zonadb as voie, substr(f.zonadd,6,39)as Ville, f.cdpost, substr(f.zonadc,1,5) as INSEE,f.cdpays,
case when x.typtel = 'EML' then x.numtel end AS contact,
case when x.typtel in ('PPP','HPN') then x.numtel else '' end AS Telcontact,
case when d.nateta = '1' then 'Etablissement Siége' else '' end AS NatEtab,
case when d.nateta = '1' then c.cdnics else '' end AS Nic,
case when s.opt006 = '1' then 'AmAlsaceMoselle' else '' end AS AmAlsaceMoselle 
from  zd01 b, zdag c, zd7r d, zd39 e,zd0f f,  zd00 a
left join zdf1 s on a.nudoss = s.nudoss 
left join zd0h x on a.nudoss = x.nudoss
where  a.cdstco='DRE' and e.idcy00 in ('598','584','581','578','574','567','549','547','546','531','530','529','526','523','522','519','515','502','500')
and a.nudoss=b.nudoss and a.nudoss=c.nudoss and a.nudoss=f.nudoss 
and a.nudoss=d.nudoss
and a.nudoss = e.nudoss
order by a.cdcode


Merci d'avance

Configuration: Windows / Chrome 79.0.3945.117

4 réponses

Messages postés
27650
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2020
2 133
Bonjour,
ce que tu veux faire ressemble à un GROUP_CONCAT sous mysql.

Regarde la réponse donnée ici
https://stackoverflow.com/questions/16771086/is-there-any-function-in-oracle-similar-to-group-concat-in-mysql


Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

J'avais vu cette fonction mais je n'ai pas réussi à la faire fonctionner.
Je vais retenter.

Merci.
jordane45
Messages postés
27650
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2020
2 133
Quelle version d'Oracle utilises tu ?
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

je viens justement de re-tester et la commande n'est as reconnu...En plus avec cette fonction je n'ai pas le choix sur l'ordre d'affichage des infos...

Voila les infos que j'ai pu trouvé sur a version oracle :

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE 11.2.0.4.0 Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
jordane45
Messages postés
27650
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2020
2 133
De quelle fonction parles tu ?
Si c'est bien :
https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030

Il est bien indiqué qu'elle est compatible Oracle 11G ..; et si tu lis la doc.. qu'elle met l'ordre utilisé dans le ORDER BY de ta requête....
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

je parlais de la Group_Concat :

ORA-00904: "GROUP_CONCAT" : identificateur non valide
00904. 00000 - "%s: invalid identifier"

J'ai trouvé une solution en utilisant un group by et en mettant la fonction min devant mes case et ça fonctionne :

Select a.cdcode , b.liblon, c.cdsire, c.cdsire||c.cdnics ,f.zonadb as voie, substr(f.zonadd,6,39)as Ville, f.cdpost, substr(f.zonadc,1,5) as INSEE,f.cdpays,
case when d.nateta = '1' then 'Etablissement Siége' else '' end AS NatEtab,
case when d.nateta = '1' then c.cdnics else '' end AS Nic,
case when s.opt006 = '1' then 'AmAlsaceMoselle' else '' end AS AmAlsaceMoselle,
min(case when x.typtel = 'EML' then x.numtel else '' end) AS contact,
min(case when x.typtel in ('PPP','HPN') then x.numtel else '' end) AS Telcontact
from zd01 b, zdag c, zd7r d, zd39 e,zd0f f, zd00 a
left join zdf1 s on a.nudoss = s.nudoss
left join zd0h x on a.nudoss = x.nudoss
where a.cdstco='DRE' and e.idcy00 in ('598','584','581','578','574','567','549','547','546','531','530','529','526','523','522','519','515','502','500')
and a.nudoss=b.nudoss and a.nudoss=c.nudoss and a.nudoss=f.nudoss
--and a.nudoss=s.nudoss
and a.nudoss=d.nudoss
and a.nudoss = e.nudoss
group by a.cdcode , b.liblon, c.cdsire, c.cdsire||c.cdnics ,f.zonadb, substr(f.zonadd,6,39), f.cdpost, substr(f.zonadc,1,5),f.cdpays,
case when d.nateta = '1' then 'Etablissement Siége' else '' end,
case when d.nateta = '1' then c.cdnics else '' end,
case when s.opt006 = '1' then 'AmAlsaceMoselle' else '' end
order by a.cdcode

Merci à toi !!