您现在的位置是:首页 >技术杂谈 >【泛微ecology_oracle】如何把查询到的单列人力资源id合并成多人力资源格式网站首页技术杂谈
【泛微ecology_oracle】如何把查询到的单列人力资源id合并成多人力资源格式
如何把查询到的单列人力资源id合并成多人力资源格式
在泛微ecology中,单列人力资源id合并成多人力资源的使用场景
我们在做很多需求的时候需要在数据库中查询到的单人力资源字段合并成多人力资源,比如:
1、在公文中,表单上要体现那些人查看过流程,那些未查看,在workflow_currentoperator表中,uerid就是单人力资源字段的表现,我们就需要合并在一起赋值给多人力资源;
2、在表单建模搭建中,我们难免需要去做一些报表,就会去做一些视图,在一些字段就需要把单人力资源字段合并;
3、在流程设计中,有时候也会把明细表中的单人力资源字段合并赋值给主表的多人力资源字段;
。。。。。
在泛微ecology中,在数据库里人员姓名存储形式
接触过泛微ecology数据库结构表的朋友们都知道,姓名的字段是浏览按钮-人力资源或多人力资源,区别就是能否选择多个人员,人力资源字段在数据库表中存储的是人员ID,多人力资源字段存储的样式是 人员ID,人员ID 中间用逗号分隔,例如张三ID是88,李四ID是89,那么多人力存储的就是 88,89
那如何实现人力资源字段合并多人力资源字段呢?
我先介绍Oracle中的实现,主要应用的listagg函数,介绍如下
函数介绍
listagg函数是Oracle 11.2 c 版本推出的,用于数据分组后将指定列数据通过间隔符号拼接,将多行转为一行显示。
实际使用
以班级为单位,查询每个班级学生(同班学生显示在一行)
select t.school_name, t.class_name, t.class_code, t.class_num,
listagg(t.student_name,';') within group (order by t.student_id) as student_name
from t_student_detail t
group by t.school_name, t.class_name, t.class_code, t.class_num
其结果如下:
函数失效场景
listagg函数拼接的字段数据类型须为varchar类型,非该数据类型的字段会出现数据为空的问题,解决方案如下:
listagg(to_char(student_id),‘;’) within group (order by student_id)
即如果字段student_id 的数据类型是非字符串,则需要将其转换。
在泛微ecology中实现查询某条流程指定节点 已查看 人员的语句是:
select listagg(userid,‘,’) within group (order by userid) as userid from workflow_currentoperator
where requestid =853153 and viewtype!=0 and nodeid=3182