Mettre tous les résultats sur une même ligne

Résolu
JsuisNul Messages postés 137 Statut Membre -  
JsuisNul Messages postés 137 Statut Membre -
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

  1. JsuisNul Messages postés 137 Statut Membre 1
     
    J'avais vu cette fonction mais je n'ai pas réussi à la faire fonctionner.
    Je vais retenter.

    Merci.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Quelle version d'Oracle utilises tu ?
      0
  2. JsuisNul Messages postés 137 Statut Membre 1
     
    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
    0
  3. JsuisNul Messages postés 137 Statut Membre 1
     
    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 !!
    0