Saturday, 4 July 2015

Oracle - SQL to concatenate multiple rows



With oracle 10g



SELECT CLASS_CATEGORY,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(CLASS_CODE,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS elements
FROM   (SELECT CLASS_CATEGORY,
               CLASS_CODE,
               ROW_NUMBER() OVER (PARTITION BY CLASS_CATEGORY ORDER BY CLASS_CODE) AS curr,
               ROW_NUMBER() OVER (PARTITION BY CLASS_CATEGORY ORDER BY CLASS_CODE) -1 AS prev
        FROM   PA_PROJECT_CLASSES_V
        Where PROJECT_ID =189479 And CLASS_CATEGORY = 'Funding Agency')
GROUP BY CLASS_CATEGORY
CONNECT BY prev = PRIOR curr AND CLASS_CATEGORY = PRIOR CLASS_CATEGORY
START WITH curr = 1;
=======================================================

Another way:

SELECT CLASS_CATEGORY, COLLECT(CLASS_CODE) FROM PA_PROJECT_CLASSES_V
Where PROJECT_ID =189479 And CLASS_CATEGORY = 'Funding Agency' GROUP BY CLASS_CATEGORY

11g Release 2

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

No comments:

Post a Comment