如何限制Listagg结果

时间:2017-12-13 18:10:25

标签: sql oracle oracle12c

我有一张包含大量就业信息的表格,我使用public class Data<T> { public Data() { _timestamp = DateTime.Now; } private T _value; public T Value { get { return _value; } set { _value = value; _timestamp = DateTime.Now; } } private DateTime _timestamp; public DateTime Timestamp { get { return _timestamp; } } } public class Foo { public int Value1 { get; set; } public bool Value2 { get; set; } } public class Program { public static void Main() { var dataValue1 = new Data<int>(); var dataValue2 = new Data<bool>(); var dataValue3 = new Data<string>(); var dataValue4 = new Data<Foo>(); //dataValue4.Value = new Foo(); Console.WriteLine(dataValue1.Value); // Output is "0" Console.WriteLine(dataValue2.Value); // Output is "False" Console.WriteLine(dataValue3.Value); // Output is "" Console.WriteLine(dataValue4.Value.Value1); // Output is "0" Console.WriteLine(dataValue4.Value.Value2); // Output is "False" } } 列出了每个用户的所有就业情况,每个用户都在一行而不是最大解码路线。使用listagg有效,但我想将其限制为前5个例如。一些员工列出了超过30个就业岗位。

listagg

1 个答案:

答案 0 :(得分:3)

您可以使用row_number()枚举值。然后使用case中的listagg()来获取前五个:

select e.id_Staff,
       count(*) as cnt,
       liastagg(case when seqnum <= 5 then e.employer_name || '('|| e.job_title || ')' end, ', ')
           within group (order by e.employer_name) AS Employ_info
from (select e.*,
             row_number() over (partition by e.id_staff order by e.id_staff) as seqnum
      from (select distinct em.id_Staff, em.employer_name, em.job_title, em_job_status
            from employment em
            where em.job_status = 'Active'
           ) e
     ) e
group by e.id_Staff