2016-12-26 5 views
0

ich listagg() bin mit Zeichenfolge aggregieren WerteOrakel listagg das Ergebnis zu lang ist

Zum Beispiel gibt es eine Tabelle wie folgt aus:

Table1 
Name  Rank 
Bob  A 
Bob  B 
Bob  C 
Tom  A 
Tom  C 
SELECT Name,LISTAGG(RANK,';') WITHIN GROUP (ORDER BY RANK) AS COMRANK 
FROM Table1 

und wir bekommen Ergebnis:

Name COMRANK 
Bob ABC 
Tom AC 

Was ist, wenn COMRANK zu lang wird? Könnte ich oben xxx finden, bevor ich sie zusammenfasse?

Antwort

2

Sie können die Zeilen mithilfe der Fensterfunktion einstufen und bis zu dem Rang begrenzen, den Sie benötigen.

SELECT Name,LISTAGG(RANK,';') WITHIN GROUP (ORDER BY RANK) AS COMRANK 
FROM (select 
    name, rank, 
    rank() over (partition by name order by rank) rnk 
    from Table1 
) where rnk < 10; --some value 
GROUP BY Name; 
+0

es funktioniert.danke – Garfield