Comment peut-plusieurs lignes concaténer en un seul Oracle sans créer une procédure stockée? [dupliquer]

StackOverflow https://stackoverflow.com/questions/1076011

Question

    

Cette question a déjà une réponse ici:

         

Comment puis-je obtenir les résultats suivants dans l'oracle sans créer une procédure stockée?

Set de données:

question_id    element_id
1              7
1              8
2              9
3              10
3              11
3              12

Résultat souhaité:

question_id    element_id
1              7,8
2              9
3              10,11,12
Était-ce utile?

La solution

Il y a plusieurs façons de faire l'agrégation de chaîne, mais le plus simple est une fonction définie par l'utilisateur. Essayez ceci pour une manière qui ne nécessite pas une fonction. Comme note , il n'y a pas de manière simple sans la fonction.

Ceci est le plus court chemin sans une fonction personnalisée: (il utilise le ROW_NUMBER () et les fonctions de SYS_CONNECT_BY_PATH)

SELECT questionid,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(elementid,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS elements
FROM   (SELECT questionid,
               elementid,
               ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) AS curr,
               ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) -1 AS prev
        FROM   emp)
GROUP BY questionid
CONNECT BY prev = PRIOR curr AND questionid = PRIOR questionid
START WITH curr = 1;

Autres conseils

De Oracle 11gR2, LISTAGG l'article devrait faire l'affaire:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;

Attention si la chaîne résultante est trop grand (plus de 4000 caractères pour un VARCHAR2, par exemple): la version 12cR2, nous pouvons utiliser TRUNCATE DEBORDEMENT ON / eRREUR pour faire face à ce problème.

Facile:

SELECT question_id, wm_concat(element_id) as elements
FROM   questions
GROUP BY question_id;

pesonally testé sur 10g; -)

De http://www.oracle-base.com/articles/10g /StringAggregationTechniques.php

Ce OTN-fil contient plusieurs façons de faire l'agrégation de chaînes, y compris une comparaison de la performance: http://forums.oracle.com/forums/message.jspa?messageID=1819487#1819487

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top