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

SQL Oracle Discussion :

Concaténation de colonnes de tuples


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    Par défaut Concaténation de colonnes de tuples
    Bonjour,

    J'ai besoin d'une piste pour résoudre le cas suivant (Oracle 10g) :

    A partir de la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TABLE test
     Name                                      Null?    Type                        
     ----------------------------------------- -------- ----------------------------
     KEY_ID                                             NUMBER                      
     NO_SEQ                                             NUMBER                      
     VAL                                                VARCHAR2(4000)
    populée ainsi

    KEY_ID NO_SEQ VAL

    1 1 a
    1 2 b
    1 3 c


    Y'a-t-il un moyen d'obtenir avec une requête le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    KEY_ID   NEW
     
    1        a,b,c
    La colonne new étant la concaténation des n séquences, séparées par le caractère , (virgule).

    Merci de votre aide précieuse.

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Bonjour,

    je pense que la réponse se trouve ici : http://www.developpez.net/forums/d58.../pivot-oracle/

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Faites une recherche sur STRING AGGREGATION sur ce forum.
    Il y a une fonction built-in à partir de 11gR2, avant il faut faire autrement.

    J'ai un faible pour la solution XML.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    Par défaut
    Waldar, merci pour le tuyau... une petite adaptation (distinct) et ça fonctionne bien.

    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
    WITH MaTable AS
    (
    SELECT 1 AS key_id, 1 AS seq , 'Addidas' AS key_val FROM dual union ALL
    SELECT 1          , 2        , 'Nike'               FROM dual union ALL
    SELECT 1          , 3        , 'Reebok'             FROM dual union all
    SELECT 2          , 1        , 'a'                  FROM dual union ALL
    SELECT 2          , 2        , 'b'                  FROM dual union ALL
    SELECT 2          , 3        , 'c'                  FROM dual 
    )
      SELECT distinct mt1.key_id,
             rtrim(REPLACE(REPLACE(xmlagg(xmlelement("x", mt2.key_val) ORDER BY mt2.key_val ASC), '<x>', ''), '</x>', ','), ',') AS agg
        FROM MaTable MT1
             INNER JOIN MaTable MT2
               ON MT2.key_id = MT1.key_id
    GROUP BY MT1.key_id, MT1.seq
    ORDER BY MT1.key_id ASC;
    Super, merci à tous.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je ne sais pas pourquoi vous faites la jointure, elle ne me paraît pas nécessaire dans ce cas, et du coup le distinct non plus :
    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
    WITH MaTable AS
    (
    SELECT 1 AS key_id, 1 AS seq , 'Addidas' AS key_val FROM dual union ALL
    SELECT 1          , 2        , 'Nike'               FROM dual union ALL
    SELECT 1          , 3        , 'Reebok'             FROM dual union ALL
    SELECT 2          , 1        , 'a'                  FROM dual union ALL
    SELECT 2          , 2        , 'b'                  FROM dual union ALL
    SELECT 2          , 3        , 'c'                  FROM dual 
    )
      SELECT mt1.key_id,
             rtrim(REPLACE(REPLACE(xmlagg(xmlelement("x", MT1.key_val) ORDER BY MT1.seq ASC), '<x>', ''), '</x>', ','), ',') AS agg
        FROM MaTable MT1
    GROUP BY MT1.key_id
    ORDER BY MT1.key_id ASC;
     
        KEY_ID AGG                 
    ---------- --------------------
             1 Addidas,Nike,Reebok 
             2 a,b,c

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. concaténer deux colonnes avec séparateur ', '
    Par briceg dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 23/10/2009, 11h33
  2. Concaténer 2 colonnes de 2 tables différentes ?…
    Par Mister Paul dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/10/2008, 11h19
  3. [MySQL] Concaténer plusieurs colonnes d'une table temporaire
    Par kryogen dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 27/08/2008, 10h56
  4. Concaténer une colonne
    Par aigleborgne dans le forum Développement
    Réponses: 3
    Dernier message: 07/05/2008, 15h02
  5. Réponses: 10
    Dernier message: 29/08/2006, 16h47

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