我有一张包含大量就业信息的表格,我使用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
答案 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