oracle 树查询语句,oracle 树查询 语句

格式:

SELECT column

FROM table_name

START WITH column=value

CONNECT BY PRIOR 父主键=子外键

select lpad(' ',4*(level-1))||name name,job,id,super from emp

start with super is null

connect by prior id=super

例子:

原始数据:select no,q from a_example2

NO NAME

---------- ------------------------------

001 a01

001 a02

001 a03

001 a04

001 a05

002 b01

003 c01

003 c02

004 d01

005 e01

005 e02

005 e03

005 e04

005 e05

需要实现得到结果是:

001 a01;a02;a03

002 b01

003 c01;c02

004 d01

005 e01;e02;e03;e04;e05

思路:

1、ORACLE8.1之后有个connect by 子句,取出整棵树数据。

create table a_example1

(

no char(3) not null,

name varchar2(10) not null,

parent char(3)

)

insert into a_example1

values('001','老王',null)

insert into a_example1

values('101','老李',null)

insert into a_example1

values('002','大王1','001')

insert into a_example1

values('102','大李1','101')

insert into a_example1

values('003','大王2','001')

insert into a_example1

values('103','大李2','101')

insert into a_example1

values('003','小王1','002')

insert into a_example1

values('103','小李1','102')

NO  NAME PARENT

001 老王

101 老李

002 大王1 001

102 大李1 101

003 大王2 001

103 大李2 101

003 小王1 002

103 小李1 102

//按照家族树取数据

select * from a_example1

select level,sys_connect_by_path(name,'/') path

from a_example1

start with /*name = '老王' and*/ parent is null

connect by parent = prior no

结果:

1 /老王

2 /老王/大王1

3 /老王/大王1/小王1

2 /老王/大王2

1 /老李

2 /老李/大李1

3 /老李/大李1/小李1

2 /老李/大李2

按照上面思路,我们只要将原始数据做成如下结构:

NO NAME

001 a01

001 a01/a02

001 a01/a02/a03

001 a01/a02/a03/a04

001 a01/a02/a03/a04/a05

002 b01

003 c01

003 c01/c02

004 d01

005 e01

005 e01/e02

005 e01/e02/e03

005 e01/e02/e03/e04

005 e01/e02/e03/e04/e05

最后按NO分组,取最大的一个值即为所需的结果。

NO NAME

001 a01/a02/a03/a04/a05

002 b01

003 c01/c02

004 d01

005 e01/e02/e03/e04/e05

SQL语句:

select no,max(sys_connect_by_path(name,';')) result from

(select no,name,rn,lead(rn) over(partition by no order by rn) rn1

from (select no,name,row_number() over(order by no,name desc) rn from a_example2)

)

start with rn1 is null connect by rn1 = prior rn

group by no

语句分析:

1、 select no,name,row_number() over(order by no,name desc) rn from a_example2

按照NO升序排序,同时按照NAME降序排序,产生伪列,目的是要形成树结构

NO  NAME RN

001 a03 1

001 a02 2

001 a01 3

002 b01 4

003 c02 5

003 c01 6

004 d01 7

005 e05 8

005 e04 9

005 e03 10

005 e02 11

005 e01 12

2、select no,name,rn,lead(rn) over(partition by no order by rn) rn1

from ( select no,name,row_number() over(order by no,name desc) rn from a_example2)

生成家族谱,即子节点与父节点有对应关系,对应关系通过rn和 rn1。其中lead为上一条记录的RN值

NO  NAME RN  RN1  001 a03 1 2 --

说明:针对NO=001来说,其下一条记录的RN=2 001 a02 2 3 --说明:针对NO=001来说,其下一条记录的RN=3 001 a01 3  --说明:针对NO=001来说,其下一条记录的RN IS NULL

002 b01 4 003 c02 5 6 003 c01 6 004 d01 7 005 e05 8 9 005 e04 9 10 005 e03 10 11 005 e02 11 12 005 e01 12

3、select no,sys_connect_by_path(name,';') result from

(select no,name,rn,lead(rn) over(partition by no order by rn) rn1

from ( select no,name,row_number() over(order by no,name desc) rn from a_example2))

start with rn1 is null connect by rn1 = prior rn

正式生成树

NO   RESULT

001 ;a01

001 ;a01;a02

001 ;a01;a02;a03

002 ;b01

005 ;e01

005 ;e01;e02

005 ;e01;e02;e03

005 ;e01;e02;e03;e04

005 ;e01;e02;e03;e04;e05

003 ;c01

003 ;c01;c02

004 ;d01

将上面结果按照NO分组,取result最大值即可,所以将上述语句改为

select no,max(sys_connect_by_path(name,';')) result from

(select no,name,rn,lead(rn) over(partition by no order by rn) rn1

from (select no,name,row_number() over(order by no,name desc) rn from a_example2)

)

start with rn1 is null connect by rn1 = prior rn

group by no

得到所需结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

table tr省略后鼠标移入显示相应信息_中考来了,人机对话、信息技术考试要求看过来...

半岛记者 魏海洋今年的中考将拉开大幕,九年级英语听说人机对话考试(以下简称“人机对话考试”)将于4月20日(周六)至21日(周日)进。八年级信息技术考试将于4月22日(周一)进行,市招考办提醒广大考生,按照准考证规定时间及时参加考试。关于两门考…

大数据平台容量评估_大数据平台

系统概述大数据应用支撑平台提供数据支撑服务,对外发布数据服务进行数据价值变现。包含数据采集、数据治理、数据交换、数据存储、数据计算相关组件的搭建、验证,并建立大数据仓库。b)功能要求1.数据采集,大数据平台数据源层有各类型数据源&a…

oracle数据库访问sqlserver2008,透过SQL Server 2008访问Oracle 10g的配置方法

之前写过一篇关于SQL Server 访问MySQL数据库的文章,最近正好又遇到需要访问Oracle 的情况,将配置过程记录下来也供大家参考。准备工作事先在需要访问Oracle 数据库的主机上完成以下工作:1. 安装SQL Server 数据库:SQL Server 200…

局域网限速软件_2号破解app重器推荐一款强大的快捷软件

破解版精破解版精品软件一些软件需要使用者付费购买才能使用其所有功能(或者才能解除使用期限),这时一些计算机高手就破解这个软件,使其不用付费也可以完全使用全部功能(或者永久使用),这种软件就叫破解版软件。此公众号中的破解版软件都源于…

人工智能到底是啥_人工智能 (AI) 是什么?| Oracle 中国

人工智能是什么?简单来说,人工智能 (AI) 是指可模仿人类智能来执行任务,并基于收集的信息对自身进行迭代式改进的系统和机器。AI 具有多种形式。例如:聊天机器人使用 AI 更快速高效地理解客户问题并提供更有效的回答智能助手使用 …

平板电脑办公软件_大屏平板互动软件-平板电脑触摸大屏控制软件

随着数字化时代的到来,触摸大屏软件的应用范围,更加宽广,无论走到哪里都能够见到,各式各样的触摸屏一体机、LED液晶屏,拼接屏等多种展示器,在这些设备上面,均能够安装着各种功能不同软件&#x…

oracle 备份教研归档失败,归档日志丢失造成Rman备份失败解决办法

--测试库的归档日志文件被无意删除了,下面是解决步骤RMAN> backup as compressed backupset database plus archivelog delete input;启动 backup 于 24-2月 -12当前日志已存档使用通道 ORA_DISK_1使用通道 ORA_DISK_2MAN-00571: RMAN-00569: ERROR MESSAGE STA…

python两个二维数组加法_对二维数组的多个列进行Numpy平均

首先,在我看来,你根本没有平均列的平均值,你只是一次平均两个数据点。在我看来,你最好不要使用reshaping数组,这样你就有了一个可以直接提供给mean的Nx2数据结构。如果列数不太兼容,可能必须先填充它。然后…

苹果6屏幕多大_苹果12使用高通X55,10亿买下的英特尔基带何时能派上用场

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以免费收到最新内容了。每天都有分享,完全是免费订阅,请放心关注。声明:本文转载自网络,如有侵权,请在后台留言联系…

ora29280 oracle,细节:utl_file_dir错误设置导致ORA-29280

sysORADG(192.168.190.241)> show parameter utlNAME TYPE VALUE------------------------------------ ---------------------- ------------------------------utl_file_dir string /oracle/test123, /oracle/logmnr <-修改前的值sysORADG(192.168.190.241)> alter …

global在python_在Python中使用“global”关键字

在Python中使用“global”关键字我从阅读文档中了解到&#xff0c;Python有一个单独的函数命名空间&#xff0c;如果我想在该函数中使用全局变量&#xff0c;我需要使用global。我正在使用Python 2.7&#xff0c;我尝试了这个小测试>>> sub [0, 0, 0, 0]>>>…

odd raio值 是什麼_乳化油相所需的HLB值

前面有分享过《常用乳化剂HLB值一览表》&#xff0c;为了方便大家查阅HLB值&#xff0c;《有机概念图、HLB值与乳化剂筛选》一文中介绍了HLB值的计算方法以及乳化剂的筛选。今天分享乳化油所需要HLB,方便大家查阅&#xff0c;油相在O/W乳状液和W/O乳状液中所需的HLB值是不同的&…

oracle12c创建schema,Oracle 12c Schema Demo 安装

Oracle 12cR2 schema demo的安装主要参考README.md文件以及Dave的文章&#xff1a;http://www.cndba.cn/dave/article/1985但其中遇到了其他问题(CDB问题)&#xff0c;以下记录安装过程以及故障处理。https://www.cndba.cn/9527/article/2303把文件拷贝到$ORACLE_HOME/demo目录…

4k纸是几厘米乘几厘米_4K纸有多大 。。厘米

展开全部4K纸通常长&#xff1a;53cm&#xff0c;宽&#xff1a;38cm。4K纸一般指“四开”大小62616964757a686964616fe4b893e5b19e31333431343039的纸张&#xff0c;目前有“国际大度”和“国际正度”的两种标准。国际大度四开纸的长宽为&#xff1a;5843cm&#xff1b;国际大…

搜狗输入法在idea打不了汉字_IDEA开发软件在linux环境下使用搜狗输入法无法进行中文输入...

IDEA开发软件在linux环境下使用搜狗输入法无法进行中文输入找到bin目录下的idea.sh文件(其他编辑器也是一样如pycharm.sh、clion.sh)。使用文本编译器打开&#xff0c;找到# -----------------# Run the IDE.# -----------------在前面添加export GTK_IM_MODULEfcitxexport QT_…

caj文件浏览器_caj文件怎么转换成pdf文件?试试这样操作,3步成功转换

诸位小伙伴用过caj文件吗&#xff1f;和pdf文件类似&#xff0c;也和电子书格式有点像&#xff0c;是我们办公中会用到的格式文件&#xff0c;不过假如你分享了一份caj格式的文档给别人&#xff0c;如果他们的电脑上没有安装对应的浏览器&#xff0c;则无法打开、阅读文件哦。鉴…

oracle 小计 排序,使用SQL实现小计,合计以及排序

--说明&#xff1a;个人学习笔记&#xff0c;实现小计合计显示&#xff0c;分组按BANK_IDOP_DATE升序排序复制代码 代码如下:--测试数据CREATE TABLE #TB(ID VARCHAR(10),BANK_ID VARCHAR(10),OP_DATE VARCHAR(10),OPERATOR_NO VARCHAR(20),AMT DECIMAL(10,2))INSERT #TB SELEC…

猜数大小编程c语言_猜数正确编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include "time.h"#include "stdlib.h"#include "stdio.h"main(){char c;clock_t start,end;time_t a,b;double var;int i,guess;srand(time(NULL));printf("do you want to play it.(y or n) …

python人脸识别门禁_用Python做人脸识别

之前用facenet做了一个人脸识别的Demo,所以在此记录一下。但因为我的水平十分有限&#xff0c;疏漏之处请多见谅。1&#xff0c;这个流程大致是先用mtcnn检测人脸位置&#xff0c;得到一个人脸的bounding box。2&#xff0c;然后用opencv根据上一个bounding box把人脸裁剪出来&…

linux thrift 安装目录,Linux下安装Thrift

Linux下安装Thrift0.11.0版本下载地址&#xff1a;http://mirrors.hust.edu.cn/apache/thrift/0.11.0/thrift-0.11.0.tar.gz执行如下命令安装Thrift依赖&#xff1a;apt-get install automake bison flex g git libboost1.55 libevent-dev libssl-dev libtool make pkg-config1…