¿Cómo pueden ser concatenados múltiples filas en una en Oracle sin crear un procedimiento almacenado? [duplicar]

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

Pregunta

    

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
¿Fue útil?

Solución

Hay muchas maneras de hacer la agregación de cuerdas, pero la más fácil es una función definida por el usuario. Prueba esto una manera que no requiere de una función. Como nota , no hay una forma sencilla y sin la función.

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

Otros consejos

A partir de Oracle 11gR2, el LISTAGG cláusula debe hacer el truco:

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

Tenga cuidado si la cadena resultante es demasiado grande (más de 4000 caracteres para un VARCHAR2, por ejemplo): desde la versión 12cR2, podemos usar en caso de desbordamiento TRUNCATE / ERROR para hacer frente a este problema.

Fácil:

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

pesonally probado en 10 g; -)

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

Esta OTN-hilo contiene varias maneras de hacer la agregación de cadena, incluyendo una comparación de rendimiento: http://forums.oracle.com/forums/message.jspa?messageID=1819487#1819487

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top