0

listagg()文字列値の集計に使用しています

たとえば、次のような表があります。

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 を見つけることはできますか?

4

1 に答える 1

3

ウィンドウ関数を使用して行をランク付けし、必要なランクまで行を制限できます。

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;
于 2016-12-26T09:22:07.090 に答える