【问题标题】:oracle listagg the outcome is too longoracle listagg 结果太长
【发布时间】:2016-12-26 09:18:42
【问题描述】:

我正在使用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 吗?

【问题讨论】:

    标签: sql oracle listagg string-aggregation


    【解决方案1】:

    您可以使用窗口函数对行进行排名,并将行限制为您需要的任何排名。

    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-01-14
      • 2012-11-27
      • 2019-03-15
      • 1970-01-01
      • 2013-01-29
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多