一些经典的SQL

表结构:部门deptid,父级部门parentdeptid,。。。。数据库的每一条记录都记录了自身ID和父级部门ID,现在要从某个部门查询其下属部门生成一棵部门关系树,sql如下:

select so.orgid,so.parentdeptid,so.orgname from sys_orginfo so start with so.orgid=xxx connect by prior so.orgid=so.parentdeptid;

xxx表示查询的部门ID。

如果知道某部门的ID,想查询出其父级部门以及父级的父级,也就是进行回溯找到根,sql如下:

select so.orgid,so.parentdeptid,so.orgname from sys_orginfo so start with so.orgid=xxx connect by prior so.parentdeptid=so.orgid;

XXX表示从那个部门开始进行回溯

两条SQL的区别就是connect by的条件交换一下。

回溯结果查出来的是父级关系的多行数据(ORACLE列转行,列合并),现在想把部门连接到一行显示,比如C的父级是B,B的父级是A,现在想拼成A/B/C sql如下:

select replace(wmsys.wm_concat(orgname),',','/') from (select so.orgid,so.parentdeptid,so.orgname from sys_orginfo so start with so.orgid=xxx connect by prior so.parentdeptid=so.orgid) ;

ORACLE的wmsys包下面的wm_concat()函数能把指定的列数据用逗号连接成一行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值