How can multiple rows be concatenated into one in Oracle without creating a stored procedure? [duplicate] How can multiple rows be concatenated into one in Oracle without creating a stored procedure? [duplicate] oracle oracle

How can multiple rows be concatenated into one in Oracle without creating a stored procedure? [duplicate]


From Oracle 11gR2, the LISTAGG clause should do the trick:

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

Beware if the resulting string is too big (more than 4000 chars for a VARCHAR2, for instance): from version 12cR2, we can use ON OVERFLOW TRUNCATE/ERROR to deal with this issue.


Easy:

SELECT question_id, wm_concat(element_id) as elementsFROM   questionsGROUP BY question_id;

Pesonally tested on 10g ;-)

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


There are many way to do the string aggregation, but the easiest is a user defined function. Try this for a way that does not require a function. As a note, there is no simple way without the function.

This is the shortest route without a custom function: (it uses the ROW_NUMBER() and SYS_CONNECT_BY_PATH functions )

SELECT questionid,       LTRIM(MAX(SYS_CONNECT_BY_PATH(elementid,','))       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS elementsFROM   (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 questionidCONNECT BY prev = PRIOR curr AND questionid = PRIOR questionidSTART WITH curr = 1;