2009-01-29 8 views

Antwort

4

fand ich diese, die zu funktionieren scheint. Gedanken?

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

Bricht das nicht, wenn Ihre ID-Werte nicht kontinuierlich sind? –

+0

hmmm, ja ich denke du hast Recht. :-( –

+0

Ich bin nicht sicher, warum Sie in Ihrer inneren Abfrage sowohl ein ROWNUM als auch ein RANK() haben. Sie brauchen wahrscheinlich nur das RANK() und dann START MIT r = 1 CONNECT BY PRIOR = r - 1. Dies erfordert keine fortlaufenden IDs, da sowohl die ID als auch der Rang generiert werden –

3

11.2 eingeführt LISTAGG, die im Gegensatz zu WM_CONCAT dokumentiert ist. Wir sind noch nicht auf 11.2, also verwenden wir eine benutzerdefinierte Aggregatfunktion.

+0

Dies ist definitiv die beste Antwort, die ich gesehen habe, und ist genau das, was ich gesucht habe ! Vielen Dank. – Harmon