手机
当前位置:查字典教程网 >编程开发 >Oracle教程 >oracle 层次化查询(行政区划三级级联)
oracle 层次化查询(行政区划三级级联)
摘要:前提:数据库表DM_xzqh样例(部分):复制代码代码如下:DMMC230000黑龙江省230100哈尔滨市230101市辖区230102道...

前提:

数据库表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 CBO几种基本的查询转换详解

Oracle基本查询过滤排序示例解析

oracle通过行范围查询取4至10行

Oracle存储过程本地编译方式

Oracle 数据库优化实战心得总结

oracle指定排序的方法详解

oracle排名函数的使用方法分享

精品推荐
分类导航