Oracle SQL : requête de concaténation
Poubellator
Messages postés
7
Statut
Membre
-
Heremion Messages postés 564 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...
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
-
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 ; -
-
-
Je ne connais pas trop Oracle mais je ne pense pas que ce soit possible.
Il va falloir ecrire un petit programme -
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...
-
Nimal,
pensez à la communauté, et décrivez votre solution en code SQL, ça peut servir :)
DROE -
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