2009-01-29 27 views

Respuesta

4

yo encontramos este que parece funcionar. ¿Pensamientos?

SELECT SUBSTR (c, 2) concatenated 
    FROM (SELECT  SYS_CONNECT_BY_PATH (myfield, ',') c, r 
       FROM (SELECT ROWNUM ID, myfield, 
          RANK() OVER (ORDER BY ROWID DESC) r 
         FROM mytable 
        ORDER BY myfield) 
     START WITH ID = 1 
     CONNECT BY PRIOR ID = ID - 1) 
WHERE r = 1; 
+0

¿No se rompe eso si sus valores de ID no son continuos? –

+0

hmmm, sí, creo que tienes razón. :-( –

+0

No estoy seguro de por qué tiene un ROWNUM y un RANK() en su consulta interna. Probablemente solo necesite el RANK() y luego START WITH r = 1 CONNECT BY PRIOR r = r - 1. Esto no requiere ID continuas, ya que tanto la ID como el rango se están generando. –

3

11.2 introdujo LISTAGG, que a diferencia de WM_CONCAT está documentado. Todavía no estamos en 11.2, así que usamos una función agregada personalizada.

+0

Esta es definitivamente la mejor respuesta que he visto, y es exactamente lo que estaba buscando ! Gracias. – Harmon

Cuestiones relacionadas