oracle层次化查询(行政区划三级级联)
Oracle 查询 级联 三级 行政区划
2023-06-13 09:14:11 时间
前提:
数据库表DM_xzqh样例(部分):
复制代码代码如下:
数据库表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
相关文章
- 深入探索Oracle归档日志查询(oracle归档日志查询)
- 查询Oracle中唯一值的方法(oracle唯一查询)
- 深入理解Oracle集群的原理(oracle集群原理)
- Oracle查询最佳实例解决方案(oracle查实例)
- Oracle 编码查询:一步搞定(oracle编码查询)
- Oracle自我连接:实现复杂查询的利器(oracle自连接)
- 探索Oracle数据库中的触发器类型(oracle触发器类型)
- Oracle查询两张表:解决方案(oracle查询两张表)
- 深入Oracle中日期查询的实践(oracle根据日期查询)
- 查询利用Oracle In查询实现列值范围筛选(oracle列值in)
- Oracle 合并单元格技巧讲解(oracle合并单元格)
- Oracle多线程查询:快速查询大型数据库(oracle多线程查询)
- 精准计算不误差:Oracle 存储小数完美解决方案(oracle存小数)
- 利用Oracle数据库实现某年数据查询(oracle查询某年数据)
- 简单易学:Oracle查询归档空间技巧(oracle查询归档空间)
- Oracle工具的比较及优劣势分析(oracle 工具 比较)
- 从Oracle中查询姓名信息(oracle查询姓名)
- Oracle内置众多用户的智慧应用(oracle内置很多用户)
- 利用Oracle元信息查询找出结果的最优路径(oracle元信息查询)
- 使用Oracle查询实现精准统计(c oracle查询统计)
- 语句Java自动生成Oracle数据库查询语句(java生成oracle)
- 查询Oracle数据库中的事务提交信息(oracle事务提交查询)
- 利用Oracle中的IN子句改善查询效率(oracle中的in子句)
- Oracle中提升查询效率的五种方法(oracle中查询效率)
- 建立Oracle两个表之间的映射关系(oracle两个表映射)
- 索引Oracle SYSB索引极大提升查询性能的神奇武器(oracle SYS_B)
- Oracle 数据库报错011,您需要了解的解决方案(oracle 011)