Oracle SQL : requête de concaténation

Fermé
Poubellator Messages postés 7 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 21 septembre 2010 - Modifié par Poubellator le 10/06/2010 à 13:11
Heremion Messages postés 539 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 - 12 avril 2012 à 09:18
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 539 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 102
12 avril 2012 à 08:31
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 539 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 102
12 avril 2012 à 09:18
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
avez vous trouver la solution ?
0
Poubellator Messages postés 7 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 21 septembre 2010
21 sept. 2010 à 10:41
Pas du tout !
0
jeanch_tlse Messages postés 13 Date d'inscription dimanche 26 septembre 2010 Statut Membre Dernière intervention 2 mars 2014 3
27 sept. 2010 à 19:01
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
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 mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
11 avril 2012 à 22:21
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 mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
12 avril 2012 à 09:08
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 539 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 102
Modifié par Heremion le 12/04/2012 à 09:17
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