Oracle SQL : requête de concaténation

Poubellator Messages postés 7 Statut Membre -  
Heremion Messages postés 564 Statut Membre -
Bonjour,

Je bloque totalement sur une requête. J'ai eu beau fouiller les tutoriaux et chercher un peu partout je n'arrive pas à trouver la solution, peut-être que c'est parce qu'elle crève les yeux ?

Voilà mon souci : pour simplifier disons que j'ai une table avec 2 champs, et ces 2 champs s'appellent Objet et TypeObjet

TypeObjet peut prendre 4 valeurs différentes : 292, 293, 294 et 295
Objet peut être associé à 1 type comme aux 4 à la fois

Cela nous donne une table comme ceci :

_______Objet________TypeObjet
_________1____________294
_________2____________295
_________2____________292
_________2____________294

J'ai besoin que ma requête me sorte le numéro de l'objet, la concaténation de tous les types associés à cet objet (classés dans l'ordre croissant et séparés par une virgule), et enfin le MIN de tous.

Ce qui donnerait ici :
1____________294____________294
2_________292,294,295_________292

J'espère que c'est clair, et que je ne me suis pas trompé en voulant trop simplifier...

7 réponses

  1. Heremion Messages postés 564 Statut Membre 102
     
    Bonjour Poubellator,

    J'aurais dans un premier temps fait un truc du genre :

    DECLARE
        CURSOR c IS 
            SELECT  DISTINCT(obj)
            FROM    dacar.objet ;
        
        r c%ROWTYPE ;
        M INTEGER ;
        chaine VARCHAR2(256) ;
    BEGIN
        FOR r IN c 
        LOOP     
            SELECT  MIN(type_obj)
            INTO    m
            FROM    dacar.objet
            WHERE   obj = r.obj ;
             
            chaine := '' ;     
            
            FOR r2 IN 
                (   SELECT  type_obj
                    FROM    dacar.objet
                    WHERE   obj = r.obj
                    ORDER BY    type_obj)
            LOOP
                chaine := chaine||r2.type_obj||',' ;
            END LOOP ;    
            chaine := SUBSTR(chaine,0,LENGTH(chaine)-1) ;
            DBMS_OUTPUT.put_line(r.obj||'--'||chaine||'--'||m) ;
        END LOOP ;
    END ;
    
    1
    1. Heremion Messages postés 564 Statut Membre 102
       
      Euh, je viens de m'apercevoir que j'ai laissé le dbms_output alors que celui-ci ne me servait juste qu'à afficher le résultat obtenu...il peut donc être mis en commentaire
      0
  2. Poubellator Messages postés 7 Statut Membre
     
    Pas du tout !
    0
  3. jeanch_tlse Messages postés 13 Statut Membre 3
     
    Je ne connais pas trop Oracle mais je ne pense pas que ce soit possible.
    Il va falloir ecrire un petit programme
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Nimal
     
    Si, il te faut faire une sous requête SELECT à l'intérieur de ton premier SELECT. Mais j'imagine que tu as déjà trouver une solution depuis le temps...
    0
  6. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    Nimal,

    pensez à la communauté, et décrivez votre solution en code SQL, ça peut servir :)

    DROE
    0
  7. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    Hello Heremion,

    Joli ce petit bout de Procédure :)
    Effectivement, ce serait la seule solution fiable ( en faire une Fonction avec obj en param) et l'appeler via une requête SQL.

    DROE
    0
    1. Heremion Messages postés 564 Statut Membre 102
       
      Oui, après bien sûr, il est possible d'en faire une petite procédure stockée et en avant :), à adapter aussi si besoin :)
      0