oracle 层次化查询(行政区划三级级联)_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

时间: 2024-10-28 22:58:02

oracle 层次化查询(行政区划三级级联)_oracle的相关文章

用Oracle并行查询发挥多CPU的威力_oracle

正在看的ORACLE教程是:用Oracle并行查询发挥多CPU的威力.参数  让我们进一步看看CPU的数量是如何影响这些参数的. 参数fast_start_parallel_rollback Oracle并行机制中一个令人兴奋之处是在系统崩溃时调用并行回滚得能力.当Oracle数据库发生少有的崩溃时,Oracle能自动检测未完成的事务并回滚到起始状态.这被称为并行热启动,而Oracle使用基于cpu_count的fast_start_parallel_rollback参数来决定未完成事务的秉性程

SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)

--====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR) --======================================================       层次化查询,即树型结构查询,是SQL中经常用到的功能之一,通常由根节点,父节点,子节点,叶节点组成,其语法如下:        SELECT [LEVEL] ,col

Ajax实现省市区三级级联(数据来自mysql数据库)_AJAX相关

实现Ajax实现省市区三级级联,需要Java解析json技术 整体Demo下载地址如下: 点我下载 address.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <script type="text/javascript">

Ajax实现省市区三级级联(数据来自mysql数据库)

实现Ajax实现省市区三级级联,需要Java解析json技术 整体Demo下载地址如下: 点我下载 address.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <script type="text/javascript">

Oracle数据库查询响应时间的计算公式问题

问题描述 Oracle数据库查询响应时间的计算公式问题 前提条件 1.一个上亿级的数据表(t1),有字段客户memberid,产品productid. 2.查询语句select memberid,productid from t1 where memberid='' and productid='' 问题 1.没有建index,查询返回结果集时间S,记录条数N的计算公式? 2.建立索引(memberid,productid),那么查询返回结果集时间S,记录条数N的计算公式?

用Oracle并行查询发挥多CPU的威力

在一个单独的服务器中安装更多的CPU成为目前的一个趋势.使用对称多处理服务器(SMP)的情况下,一个Oracle服务器拥有8个.16个或32个CPU以及几吉比特RAM的SGA都不足为奇.     Oracle跟上了硬件发展的步伐,提供了很多面向多CPU的功能.从Oracle8i开始,Oracle在每个数据库函数中都实现了并行性,包括SQL访问(全表检索).并行数据操作和并行恢复.对于Oracle专业版的挑战是为用户的数据库配置尽可能多的CPU.     在Oracle环境中实现并行性最好的方法之

如何解决Oracle分页查询中排序与效率问题

本文将结合作者近日工作中,在ORACLE数据库分页查询时,遇到一个小问题,为大家讲解如何解决Oracle分页查询中排序与效率问题. 原始未分页查询Sql代码如下: select ROWNUM rn, t.id ID, o.name YYB,u.name XM, t.MC from tZDYSX t,tuser u,lborganization o where t.cjr=u.id and u.orgid=o.orgcode and t.gx = 1 order by ID 结果如下: RN  I

关联-关于oracle中查询sql的优化

问题描述 关于oracle中查询sql的优化 在数据库中的某个表中有几百万条数据,现在要用这张表关联别的表去查询,查询速度很慢,如何优化才能使查询速度快一些. 解决方案 先优化SQL,然后再优化业务逻辑.最后优化数据库数据存储.起码得把SQL贴出来看看吧,几百万的数据不算多呀. 解决方案二: oracle的权值查询 解决方案三: 用一个相关联的ID,直接查那个表,这样就简单了!

oracle分组查询中 查出的值为空的,用nvl()函数,把为空的填为0 为什么不起作用??

问题描述 oracle分组查询中 查出的值为空的,用nvl()函数,把为空的填为0 为什么不起作用?? 解决方案 不知道具体的情况 不过count(0) 不是null 如果没有值默认也是0 如例 select count(0) from dual where 1=2