zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

Oracle 查询 级联 三级 行政区划
2023-06-13 09:14:11 时间
前提:
数据库表DM_xzqh样例(部分):
复制代码代码如下:

DMMC
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,该行用于表示该行政区划所属的上级行政区划。具体代码如下:
复制代码代码如下:

selectt.dm,t.mc,case
whensubstr(t.dm,3)="0000"then1
whensubstr(t.dm,5)="00"thento_number(substr(t.dm,1,2)||"0000")
whensubstr(t.dm,5)!="00"thento_number(substr(t.dm,1,4)||"00")
else0
endsjbmfromdm_xzqht

结果如下:
序号DMMCSJBM
1230000黑龙江省1
2230100哈尔滨市230000
3230101市辖区230100
4230102道里区230100
5232700大兴安岭230000
6230103南岗区230100
7230104道外区230100
8230108平房区230100
9230109松北区230100
10230110香坊区230100
11230111呼兰区230100
12230112阿城区230100
13230123依兰县230100
14238000农垦分局230000
15230124方正县230100
16230125宾县230100
17230126巴彦县230100
18230127木兰县230100
19230128通河县230100
20230129延寿县230100
21230182双城市230100
22230183尚志市230100
然后,就可以利用oracle的层次关系将该查询出的数据分级了,具体代码如下:
复制代码代码如下:
selectlevel,dm,mc,sjbmfrom
(selectt.dm,t.mc,case
whensubstr(t.dm,3)="0000"then1
whensubstr(t.dm,5)="00"thento_number(substr(t.dm,1,2)||"0000")
whensubstr(t.dm,5)!="00"thento_number(substr(t.dm,1,4)||"00")endsjbmfromdm_xzqht)
[wherelevel=2]--该条件语句用于查询具体的每一个级别的行政区划
startwithsjbm=1
connectbypriordm=sjbm
[orderbylevel];

结果如下:
序号levelDMMCSJBM
11230000黑龙江省1//省,level->1
22230100哈尔滨市230000//市,level->2
33230101市辖区230100//县,level->3
43230102道里区230100
53230103南岗区230100
63230104道外区230100
73230108平房区230100
83230109松北区230100
93230110香坊区230100
103230111呼兰区230100
113230112阿城区230100
123230123依兰县230100
133230124方正县230100
143230125宾县230100
153230126巴彦县230100
163230127木兰县230100
173230128通河县230100
183230129延寿县230100
193230182双城市230100
203230183尚志市230100
213230184五常市230100
222232700大兴安岭地区230000