• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    oracle 层次化查询(行政区划三级级联)
    前提:
    数据库表DM_xzqh样例(部分):
    复制代码 代码如下:

    DM MC
    230000 黑龙江省
    230100 哈尔滨市
    230101 市辖区
    230102 道里区
    232700 大兴安岭
    230103 南岗区
    230104 道外区
    230108 平房区
    230109 松北区
    230110 香坊区
    230111 呼兰区
    230112 阿城区
    230123 依兰县
    238000 农垦分局
    230124 方正县
    230125 宾县
    230126 巴彦县
    230127 木兰县
    230128 通河县
    230129 延寿县
    230182 双城市
    230183 尚志市

    现在将上面的行政区划按代码分为三个级别:省(后四位为0)/市(后两位为0)/县,同时分别标出他们的级别,这样的话,便于后期根据不同的级别查询。

    首先,根据上面表拓展出新的一行sjbm,该行用于表示该行政区划所属的上级行政区划。具体代码如下:
    复制代码 代码如下:

    select t.dm,t.mc,case
    when substr(t.dm,3)='0000' then 1
    when substr(t.dm,5)='00' then to_number(substr(t.dm,1,2)||'0000')
    when substr(t.dm,5)!='00' then to_number(substr(t.dm,1,4)||'00')
    else 0
    end sjbm from dm_xzqh t

    结果如下:
    序号 DM MC SJBM
    1 230000 黑龙江省 1
    2 230100 哈尔滨市 230000
    3 230101 市辖区 230100
    4 230102 道里区 230100
    5 232700 大兴安岭 230000
    6 230103 南岗区 230100
    7 230104 道外区 230100
    8 230108 平房区 230100
    9 230109 松北区 230100
    10 230110 香坊区 230100
    11 230111 呼兰区 230100
    12 230112 阿城区 230100
    13 230123 依兰县 230100
    14 238000 农垦分局 230000
    15 230124 方正县 230100
    16 230125 宾县 230100
    17 230126 巴彦县 230100
    18 230127 木兰县 230100
    19 230128 通河县 230100
    20 230129 延寿县 230100
    21 230182 双城市 230100
    22 230183 尚志市 230100
    然后,就可以利用oracle的层次关系将该查询出的数据分级了,具体代码如下:
    复制代码 代码如下:

    select level,dm,mc,sjbm from
    (select t.dm,t.mc,case
    when substr(t.dm,3)='0000' then 1
    when substr(t.dm,5)='00' then to_number(substr(t.dm,1,2)||'0000')
    when substr(t.dm,5)!='00' then to_number(substr(t.dm,1,4)||'00') end sjbm from dm_xzqh t)
    [where level=2 ]--该条件语句用于查询具体的每一个级别的行政区划
    start with sjbm=1
    connect by prior dm=sjbm
    [order by level];

    结果如下:
    序号 level DM MC SJBM
    1 1 230000 黑龙江省 1 //省 ,level->1
    2 2 230100 哈尔滨市 230000//市,level->2
    3 3 230101 市辖区 230100//县,level->3
    4 3 230102 道里区 230100
    5 3 230103 南岗区 230100
    6 3 230104 道外区 230100
    7 3 230108 平房区 230100
    8 3 230109 松北区 230100
    9 3 230110 香坊区 230100
    10 3 230111 呼兰区 230100
    11 3 230112 阿城区 230100
    12 3 230123 依兰县 230100
    13 3 230124 方正县 230100
    14 3 230125 宾县 230100
    15 3 230126 巴彦县 230100
    16 3 230127 木兰县 230100
    17 3 230128 通河县 230100
    18 3 230129 延寿县 230100
    19 3 230182 双城市 230100
    20 3 230183 尚志市 230100
    21 3 230184 五常市 230100
    22 2 232700 大兴安岭地区 230000
    您可能感兴趣的文章:
    • 解析Oracle中多表级联删除的方法
    • Oracle多表级联更新详解
    • Oracle数据库中的级联查询、级联删除、级联更新操作教程
    上一篇:ORACLE 最大连接数的问题
    下一篇:oracle 查询表名以及表的列名
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    oracle 层次化查询(行政区划三级级联) oracle,层次,化,查询,行政区划,