oracle查询语句
选择列
从table_name
以列=值开始
通过以前的父密钥=外部密钥连接
选择模式('',4 *(一))| |名称,工作,身份,超从EMP
超级启动是空的
通过前面的id =超级连接
实例uff1a
原始数据:选择无,问从a_example2
没有名字
----------------------------------------
001 A01
001 A02
001 A03
001 A04
001 A05
002 B01
003 C01
003二氧化碳
004 D01
005 E01
005 E02
005 E03
005大对决
005 E05
需要实现的结果是:
001 A01 A02 A03;;
002 B01
003 C01;二氧化碳
004 D01
005 E01 E02 E03 E04;;;;E05
思想:
1、oracle8.1后,有一个连接的条款采取了整个树的数据。
创建表a_example1
(
没有char(3)不是null,
名字空不空(10),
父字符(3)
)
插入a_example1
值('001 ','老国王,null)
插入a_example1
值('101 ',' Lao Li ',null)
插入a_example1
值('002 ','王1 ','001)
插入a_example1
值('102 ','大李1,'101)
插入a_example1
值('003 ','王2 ','001)
插入a_example1
值('103 ','大李2,'101)
插入a_example1
值('003 ',' 1 ','002)
插入a_example1
值('103、Xiao Li 1,'102)
没有名字的父母
001岁的王
101岁的李
002王1001
102大黎1101
003王2001
103大黎2101
003王1002
103 Xiao Li 1102
根据家族树获取数据
SELECT * FROM a_example1
选择水平,sys_connect_by_path(名称、路径)
从a_example1
首先以劳望开头。
通过父连接
Result:
1 劳望
2 老国王/国王1
3 /老王/国王1 /小王1
2 老国王/国王2
1 Lao Li
2 老李/大李1
3 老李/李1 /小李1
2 老李/大李2
根据上面的想法,我们必须把原始数据做成如下:
没有名字
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 / / E03 E01 E02
005 E01 E02 / / / E03 E04
005 E01 E02 / / / / E03 E04 E05
最后,它按NO分组,最大值是所期望的结果。
没有名字
001 / / A01 A02 A03 / / A04 A05
002 B01
003 C01、C02
004 D01
005 E01 E02 / / / / E03 E04 E05
SQL语句:
选择否,马克斯(sys_connect_by_path(名字,';'))的结果
(选择NO、名字、RN、铅(RN))(按顺序分隔)
从(选择没有名字,row_number()在(不,叫倒序)Rn)
)
从1是无效的连接RN1 =前RN
组没有
报表分析:
1,选择无,名,row_number()在(不,叫倒序)中氡
为了形成树结构,根据NO的升序和名字降序顺序生成伪列。
没有名字的RN
001 A03 1
001 A02 2
001 A01 3
002、4
003二氧化碳5
003 C01 6
004 D01 7
005 E05 8
005 E04 9
005 E03 10
005 E02 11
005 E01 12
2,选择否、名称、RN、引导(RN)(按顺序分隔)。
从(选择没有名字,row_number()在(不,叫倒序)Rn)
家族谱的产生,即子节点和父节点之间的关系,通过RN和RN1的对应关系。铅是先前记录的RN值
没有名字的RN RN1 001 A03 12
注:没有= 001,记录下Rn = 2001 - 23 = 001 A02:没有,记录下Rn = 3001 - 3 = 001 A01:不,下一个记录是空的
002、4003二氧化碳56003 C01 6004 D01 7005 E05 89005 E03 E04 910005 1011005 12 1112005 E01 E02
3,选择否,sys_connect_by_path(名字,';')的结果
(选择NO、名字、RN、铅(RN))(按顺序分隔)
从(选择没有名字,row_number()在(不,叫倒序)Rn)))
从1是无效的连接RN1 =前RN
正式的生成树
没有结果
001;A01
001;A01;A02
001;A01 A02 A03;;
002;B01
005;E01
005 E01 E02;;
005;E01 E02;原料;
005;E01 E02 E03 E04;;;
005;E01 E02 E03 E04;;;;E05
003;C01
003 C01;二氧化碳;
004;D01
以上结果按NO分组,取结果的最大值,将上述语句改为
选择否,马克斯(sys_connect_by_path(名字,';'))的结果
(选择NO、名字、RN、铅(RN))(按顺序分隔)
从(选择没有名字,row_number()在(不,叫倒序)Rn)
)
从1是无效的连接RN1 =前RN
组没有
得到预期的结果。