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 -
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...
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...
A voir également:
- Oracle concaténer plusieurs champs
- Concatener deux cellules excel - Guide
- Word mettre à jour tous les champs ✓ - Forum Word
- Datediff oracle ✓ - Forum Oracle
- Excel concatener retour à la ligne - Forum Programmation
- Oracle liste des tables ✓ - Forum Oracle
7 réponses
Bonjour Poubellator,
J'aurais dans un premier temps fait un truc du genre :
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
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
Je ne connais pas trop Oracle mais je ne pense pas que ce soit possible.
Il va falloir ecrire un petit programme
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...