IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Concaténer plusieurs tuples dans un résultat


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut Concaténer plusieurs tuples dans un résultat
    Bonjour à tous,

    J'ai un problème qui a déjà été soulevé et résolu pour MySQL par exemple mais j'aimerai savoir si il existe quelque chose pour Oracle...

    Voila un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Requete : SELECT pk FROM test
     
    Qui me retourne :
     
    pk
    --------
    1
    2
    3
    4
    Moi j'aimerai avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    res
    ----------
    1,2,3,4
    Donc j'ai lu pas mal de chose dont la fonction GROUP_CONCAT de MySQL qui semble répondre à ce besoin...

    Mais je sèche sous oracle... a moins de faire une fonction ou procédure mais j'aimerai savoir si il n'y a pas quelque chose de plus light...

    Merci d'avance !

  2. #2
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Tu peux faire tes propres fonction d'aggregation exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    create or replace type string_agg_type as object
    (
       total varchar2(4000),
     
       static function
            ODCIAggregateInitialize(sctx IN OUT string_agg_type )
            return number,
     
       member function
            ODCIAggregateIterate(self IN OUT string_agg_type ,
                                 value IN varchar2 )
            return number,
     
       member function
            ODCIAggregateTerminate(self IN string_agg_type,
                                   returnValue OUT  varchar2,
                                   flags IN number)
            return number,
     
       member function
            ODCIAggregateMerge(self IN OUT string_agg_type,
                               ctx2 IN string_agg_type)
            return number
    );
    /
     
     
     
     
    create or replace type body string_agg_type
    is
     
    static function ODCIAggregateInitialize(sctx IN OUT string_agg_type)
    return number
    is
    begin
        sctx := string_agg_type( null );
        return ODCIConst.Success;
    end;
     
    member function ODCIAggregateIterate(self IN OUT string_agg_type,
                                         value IN varchar2 )
    return number
    is
    begin
        self.total := self.total || ',' || value;
        return ODCIConst.Success;
    end;
     
    member function ODCIAggregateTerminate(self IN string_agg_type,
                                           returnValue OUT varchar2,
                                           flags IN number)
    return number
    is
    begin
        returnValue := ltrim(self.total,',');
        return ODCIConst.Success;
    end;
     
    member function ODCIAggregateMerge(self IN OUT string_agg_type,
                                       ctx2 IN string_agg_type)
    return number
    is
    begin
        self.total := self.total || ctx2.total;
        return ODCIConst.Success;
    end;
     
     
    end;
    /
     
    CREATE or replace
    FUNCTION stragg(input varchar2 )
    RETURN varchar2
    PARALLEL_ENABLE AGGREGATE USING string_agg_type;
    /
     
     
    select deptno, stragg(ename)
     from emp
    group by deptno
     
     
        DEPTNO
    ----------
    STRAGG(ENAME)
    ---------------------------------------------------------------------------------
    --------------------------------------------------
            10
    CLARK,KING,MILLER
     
            20
    SMITH,FORD,ADAMS,SCOTT,JONES
     
            30
    ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
     
     
    would be the approach.

Discussions similaires

  1. [AC-2007] Probleme pour Concaténer plusieurs enregistrements dans une seule colonne
    Par severik dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 08/11/2017, 15h15
  2. Réponses: 4
    Dernier message: 29/10/2010, 17h05
  3. [AC-2003] Concaténation plusieurs valeurs dans un même enregistrement
    Par Hmiachon dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/04/2009, 10h02
  4. concaténer plusieurs lignes dans un champs
    Par papoulouis dans le forum SQL
    Réponses: 10
    Dernier message: 30/01/2009, 20h08
  5. "concaténer" plusieurs lignes dans un seul champ
    Par djobert dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/12/2008, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo