最近遇到需要做部门树形架构展示 的场景,分享一下实现思路:
根据部门的上下级关系,做成SQL视图,然后将这个视图作为到数据分组的"存储表"。就可以自动生成分组数据,并且是以树形结构展示部门。
将员工及其主任岗信息做成一个视图,然后新建基础资料,表名绑定这个视图,然后添加数据分组,绑定第1步的部门树形分组视图,就可以实现上图中的【员工花名册】效果。
如果有其他单据的部门字段需要按树形结构选择部门,则添加数据分组字段,绑定第1步的部门树形分组视图即可。
这里主要分享一下递归查询生成部门树形分组视图的SQL。
这个SQL视图是按照标准的数据分组后台表储结构进行构建的,非常好用。
WITH TEMP AS
(SELECT a.FDEPTID,a.FPARENTID,a.FNumber,a.F_ora_YJBM,fullParentID=Cast('.'+Cast(a.FPARENTID AS NVarchar) AS NVarchar)
FROM T_BD_Department a WHERE a.FDEPTID = 658011/*最顶层部门的内码*/
UNION ALL
SELECT b.FDEPTID,b.FPARENTID,b.FNumber,b.F_ora_YJBM,fullParentID=Cast(Cast(a.fullParentID AS NVarchar)+'.'+Cast(b.FPARENTID AS NVarchar) AS NVarchar)
FROM TEMP A
INNER JOIN T_BD_Department B ON B.FPARENTID = A.FDEPTID )
SELECT a.FDeptId,a.FParentID,a.FNumber,depL.FName,Replace(a.FullParentID,'.0','') FullPartentID,depL.FFullName
FROM TEMP a
inner join T_BD_Department_L depL on depL.FDEPTID=a.FDEPTID and depL.FLocalEid=2052
where a.F_ora_YJBM<>0/*根据实际情况过滤想显示出来的部门*/
order by a.FNumber