树形结构机构信息表常用查询_层次查询学习2

本文以一个树型结构层次查询的实例,加深理解。

一、构建表及测试数据

--建表及插入测试数据
-- Create table
create table SYS_JGXXB
(
  JGID  NUMBER not null,
  JGMC  VARCHAR2(50) not null,
  FJGID NUMBER
);
-- Add comments to the columns 
comment on column SYS_JGXXB.JGID
  is '机构ID';
comment on column SYS_JGXXB.JGMC
  is '机构名称';
comment on column SYS_JGXXB.FJGID
  is '上级机构ID';
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7798, '冉庙乡', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7799, '张湾村', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7800, '兰堂村', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7801, '梧樟村', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7802, '冉庙村', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7803, '赵集村', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7804, '新杨堂村', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7805, '张桥村', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7806, '乡直', 7798);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7807, '杨楼乡', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7808, '杨楼村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7809, '八里村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7810, '王小庄村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7811, '前进村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7812, '王台村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7813, '汤圩村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7814, '王屯民族村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7815, '张岗村', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7816, '镇直', 7807);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7817, '乌江乡', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7818, '乌江', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7819, '李庄', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7820, '周圩', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7821, '李桥', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7822, '刘大郢', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7823, '李土楼', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7824, '龙凤', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7825, '瓦房', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7826, '关寺', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7827, '镇直', 7817);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7828, '正午乡', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7829, '横山村', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7830, '吴寨村', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7831, '王桥村', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7832, '正午居', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7833, '田楼居', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7834, '程圩村', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7835, '张庙村', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7836, '大任村', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7837, '陈庄村', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7838, '镇直', 7828);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7839, '插花镇', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7840, '毛桥村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7841, '板桥村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7842, '赵店村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7843, '朱楼村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7844, '东黄村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7845, '闸南村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7846, '兰楼村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7847, '郭营村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7848, '杨桥村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7849, '前于村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7850, '曾桥村', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7851, '中心居', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7852, '人民居', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7853, '新元居', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7854, '成功居', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7855, '镇直', 7839);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7856, '枣庄镇', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7857, '蒋楼', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7858, '李庄', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7859, '刘庄', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7860, '宁桥', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7861, '枣庄', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7862, '牛庙', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7863, '童庄', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7864, '大桥', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7865, '杨寨', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7866, '镇直', 7856);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7867, '老庙镇', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7868, '庙南居委会', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7869, '庙北居委会', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7870, '马楼村', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7871, '马圩村', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7872, '赵庄村', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7873, '王海村', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7874, '李土桥村', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7875, '公平村', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7876, '向阳村', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7877, '镇直', 7867);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7878, '口孜镇', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7879, '枣元村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7880, '王庄村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7881, '武后楼村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7882, '白元村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7883, '饶海村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7884, '花园村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7885, '王老庄村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7886, '曹庄村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7887, '济河村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7888, '大坝村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7889, '钓台村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7890, '白屯民族村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7891, '焦庄村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7892, '洪沟村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7893, '洪阳村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7894, '杜康村', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7895, '刘伶居', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7896, '镇直', 7878);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7897, '袁寨镇', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7898, '江店', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7899, '临颖', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7900, '西康', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7901, '前楼', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7902, '郝桥', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7903, '同庄', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7904, '河北', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7905, '北照', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7906, '袁寨居委会', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7907, '王海居委会', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7908, '范沟', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7909, '武营', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7910, '镇直', 7897);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7911, '新华办', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7912, '辛桥', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7913, '梨树', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7914, '李洼', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7915, '蔡湖', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7916, '吕寨', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7917, '老集', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7918, '杨付', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7919, '任海', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7920, '处直', 7911);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7921, '河东办', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7922, '向阳社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7923, '北京路社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7924, '大桥社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7925, '闸东社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7926, '张北社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7927, '枣元社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7928, '訾郢社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7929, '闫前社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7930, '赵大社区', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7931, '处直', 7921);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7932, '向阳办', 7797);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7933, '东平社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7934, '胡桥社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7935, '桃元社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7936, '致富路社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7937, '幸福东路', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7938, '关庄社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7939, '振兴路社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7940, '乡直', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7941, '三角州', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7942, '二处社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7943, '烟厂社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7944, '同立社区', 7932);
insert into SYS_JGXXB (JGID, JGMC, FJGID)values (7945, '区直', 7797);
COMMIT;


二、查询实例

--1、取树枝
SELECT JGID, JGMC, FJGID
  FROM SYS_JGXXB
 --WHERE CONNECT_BY_ISLEAF = 1
 START WITH FJGID = 7817
CONNECT BY PRIOR JGID = FJGID
 ORDER BY JGID;
 --2、行转列(WMSYS.WM_CONCAT)
SELECT B.JGMC, A.FJGID, WMSYS.WM_CONCAT(A.JGMC)
  FROM SYS_JGXXB A
  LEFT JOIN SYS_JGXXB B
    ON A.FJGID = B.JGID
 GROUP BY B.JGMC, A.FJGID;
--3、行转列(层次函数)
WITH SYS_JGXXB_RANK AS
 (SELECT JGID,
         JGMC,
         FJGID,
         ROW_NUMBER() OVER(PARTITION BY FJGID ORDER BY FJGID) PAR_ROW_NUM
    FROM SYS_JGXXB)
SELECT FJGID, LTRIM(MAX(SYS_CONNECT_BY_PATH(JGMC, ',')), ',') JG_SUB_LIST
  FROM SYS_JGXXB_RANK
 WHERE CONNECT_BY_ISLEAF = 1
 START WITH PAR_ROW_NUM = 1
CONNECT BY PRIOR PAR_ROW_NUM = PAR_ROW_NUM - 1 AND PRIOR FJGID = FJGID
 GROUP BY FJGID, JGID
 ORDER BY FJGID;
--4、行转列(有关联)
WITH SYS_JGXXB_RANK AS
 (SELECT JGID,
         JGMC,
         FJGID,
         ROW_NUMBER() OVER(PARTITION BY FJGID ORDER BY FJGID) PAR_ROW_NUM
    FROM SYS_JGXXB)
SELECT A.FJGID, B.JGMC, LTRIM(MAX(SYS_CONNECT_BY_PATH(A.JGMC, ',')), ',') JG_SUB_LIST
  FROM SYS_JGXXB_RANK A
 INNER JOIN SYS_JGXXB B
    ON A.FJGID = B.JGID
 WHERE CONNECT_BY_ISLEAF = 1
 START WITH A.PAR_ROW_NUM = 1
CONNECT BY PRIOR PAR_ROW_NUM = PAR_ROW_NUM - 1 AND PRIOR A.FJGID = A.FJGID
 GROUP BY A.FJGID, B.JGMC
 ORDER BY A.FJGID;


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值