In che modo più file possono essere concatenate in una in Oracle senza creare una stored procedure?

Come posso ottenere quanto segue in oracle senza creare una stored procedure?

Set di dati:

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

Risultato desiderato:

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

    Ci sono molti modi per fare l’aggregazione di stringhe, ma la più semplice è una funzione definita dall’utente. Prova questo per un modo che non richiede una funzione. Come nota, non esiste un modo semplice senza la funzione.

    Questo è il percorso più breve senza una funzione personalizzata: (usa le funzioni ROW_NUMBER () e 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; 

    Da Oracle 11gR2, la clausola LISTAGG dovrebbe fare il trucco:

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

    Facile:

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

    Pesonalmente testato su 10g 😉

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

    Questo thread OTN contiene diversi metodi per eseguire l’aggregazione di stringhe, incluso un confronto delle prestazioni: http://forums.oracle.com/forums/message.jspa?messageID=1819487#1819487