2016-12-26 9 views
0

長すぎる私は集計文字列にlistagg()を使用しています例えばOracleは

値、このようなテーブルがあります:

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 

は、我々は結果を得る:

Name COMRANK 
Bob ABC 
Tom AC 

COMRANKが長くなりすぎるとどうなりますか?私はそれらを集める前にトップxxxを見つけることができますか?

答えて

2

ウィンドウ機能を使用して行をランク付けし、必要なランクまで上限を設定できます。

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

働いています。 – Garfield