VIVEZ LE
FOOTBALL !

Posez votre question Signaler

Oracle SQL : requête de concaténation

Poubellator 6Messages postés 12 octobre 2006Date d'inscription 21 septembre 2010Dernière intervention - Dernière réponse le 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...
Lire la suite 

Oracle SQL : requête de concaténation »

9 réponses
Réponse
+1
moins plus
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 ;
Heremion- 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
Ajouter un commentaire
Réponse
+0
moins plus
Je ne connais pas trop Oracle mais je ne pense pas que ce soit possible.
Il va falloir ecrire un petit programme
Ajouter un commentaire
Réponse
+0
moins plus
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...
Ajouter un commentaire
Réponse
+0
moins plus
Nimal,

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

DROE
Ajouter un commentaire
Réponse
+0
moins plus
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
Heremion- 12 avril 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 :)
Ajouter un commentaire
Ce document intitulé « Oracle SQL : requête de concaténation » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?