Mettre tous les résultats sur une même ligne
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 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 :
Merci d'avance
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
A voir également:
- Ora-00904 identificateur non valide
- Partager photos en ligne - Guide
- Resultats foot - Télécharger - Vie quotidienne
- Mètre en ligne - Guide
- Comment se mettre hors ligne sur instagram - Guide
- Aller à la ligne excel - Guide
4 réponses
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
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
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
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
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....
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....
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 !!
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 !!