varios una tipos solo salida procedimientos procedimiento parametros hacer funciones entrada ejemplos ejecutar developer consulta con bloques almacenado sql oracle concatenation string-aggregation

sql - tipos - ¿Cómo se pueden concatenar varias filas en una en Oracle sin crear un procedimiento almacenado?



procedure oracle ejemplos (4)

Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo lograr lo siguiente en Oracle sin crear un procedimiento almacenado?

Conjunto de datos:

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

Resultado deseado:

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


De Oracle 11gR2, la cláusula LISTAGG debería hacer el truco:

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




Hay muchas maneras de hacer la agregación de cadenas, pero la más fácil es una función definida por el usuario. Pruebe esto de una manera que no requiera una función. Como nota, no hay una manera simple sin la función.

Esta es la ruta más corta sin una función personalizada: (usa las funciones ROW_NUMBER () y 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;