[ORACLE] Concaténation d'enregistrements

Concaténation d'enregistrements [ORACLE] - SQL/NoSQL - Programmation

Marsh Posté le 13-05-2004 à 08:15:25    

Hello !
 
Je me prends la tête sur une chose que je ne trouve pas.
Mon problème semble pourtant anodin, enfin je crois :whistle:  
 
En une seule requête SQL, je voudrais afficher ceci...
 


MaTable
---------------
Ident   Nom
 
1       pierre
1       paul
1       jacques
2       toto
2       tutu


 
En cela...
 


---------------
Ident   Noms
 
1       pierre, paul, jacques
2       toto, titi


 
C'est possible tout ça ?

Reply

Marsh Posté le 13-05-2004 à 08:15:25   

Reply

Marsh Posté le 13-05-2004 à 08:55:14    

la concaténation est possible avec d'autres champs du même enregistrement, mais pas avec un champ d'un autre enregistrement. là tu est obligé de faire n requêtes pour n groupes que tu veux [:spamafote]
 
Si qqn peux confirmer mes dires. merci

Reply

Marsh Posté le 13-05-2004 à 15:07:55    

il me semble bien que ce n'est pas possible directement en SQL ...
 
mais bon, c'est tellement simple de le faire dans le code qui lance la requête ...

Reply

Marsh Posté le 13-05-2004 à 20:15:27    

Bonsoir ici !
 
Mes contraintes sont telles qu'il fallait que je trouve ça en une requête, et c'est chose faite à présent.
 
Bon, effectivement ce n'est pas possible de faire ça avec une instruction SQL définie.
 
Des fois que quelqu'un se pose la même question que moi, ce qui ne devrait pas représenter grande monde :whistle: ...
 
Il faut créer une fonction en PL/SQL, qu'il est donc possible d'utiliser de manière transparente en SQL.
 
La création de la fonction...


create or replace
  function MonStrCat( ArgIdent in number )
  return varchar2
is
  VarRetour varchar2(2000) default null;
  VarSep varchar2(2) default null;  
begin
  for x in ( select Nom from MaTable where Ident = ArgIdent )  
  loop
    VarRetour := VarRetour || VarSep  || x.Nom;
    VarSep := ', ';
  end loop;
  return VarRetour;
end;
/


 
La requête SQL...


select Ident, MonStrCat(Ident) Noms
from MaTable
group by Ident;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed