Oracle SQL : requête de concaténation

Poubellator Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
Heremion Messages postés 538 Date d'inscription   Statut Membre Dernière intervention   -
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

Heremion Messages postés 538 Date d'inscription   Statut Membre Dernière intervention   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
Heremion Messages postés 538 Date d'inscription   Statut Membre Dernière intervention   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
popo
 
avez vous trouver la solution ?
0
Poubellator Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Pas du tout !
0
jeanch_tlse Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   3
 
Je ne connais pas trop Oracle mais je ne pense pas que ce soit possible.
Il va falloir ecrire un petit programme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
Heremion Messages postés 538 Date d'inscription   Statut Membre Dernière intervention   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