日期:2014-05-17  浏览次数:21022 次

求助:关于单位和部门的排序问题
Oracle数据库,现有一组织机构表organ,
字段:id, cod(编码), nam(名称), typ(组织类别:单位00/部门01), ord(当前所在层排序)
显示结构顺序结果应为:


同层次的部门与分公司可任意调整排序。
我当前的做法是新增一个字段,将父级+子级排序数字组合成编码,再按照这个编码排序,但是当其中一个公司或部门的排序改变后就有问题了,也就是排序不会变。

所以我想不增加ordCod这个字段,而是将父级+子级+孙级+...的排序数字,以查询的方式再组合成的编码按其排序显示。
恳求大师告知查询的方法。

------解决方案--------------------
依稀记得有个connect_by_path函数可以做到,你google下吧
------解决方案--------------------
with tb_data as (
select null cod,null nam,null typ,null ord from dual where 1=2 union all
select '00' cod,'集团总公司' nam,'00' typ,1 ord from dual union all
select '0002' cod,'部门1' nam,'01' typ,1 ord from dual union all
select '0003' cod,'部门1' nam,'01' typ,2 ord from dual union all
select '0001' cod,'分公司1' nam,'00' typ,3 ord from dual union all
select '000101' cod,'部门1-1' nam,'01' typ,1 ord from dual union all
select '00010101' cod,'部门1-1-1' nam,'01' typ,1 ord from dual union all
select '00010102' cod,'部门1-1-2' nam,'01' typ,2 ord from dual union all
select '000102' cod,'部门1-2' nam,'01' typ,2 ord from dual union all
select '0004' cod,'分公司2' nam,'00' typ,4 ord from dual union all
select '000401' cod,'部门2-1' nam,'01' typ,1 ord from dual)
Select t.*, --
Level, --递归层次
sys_connect_by_path(cod, ',') path --路径
From tb_data t
 Start With cod = '00' --起始条件
Connect By cod Like Prior cod || '__' --指定父子关系
 Order Siblings By ord --兄弟间排序
;