-----------测试数据--------------
create table test111(父层 varchar2(20),父层代码 varchar2(20),子层 varchar2(20),子层代码 varchar2(20))
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500957','L02041','UE24205','L02021')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500957','L02041','7155031A','DUMMY')
insert into test111(父层,父层代码,子层,子层代码)VALUES('UE24205','L12021','7155031A','DUMMY')
insert into test111(父层,父层代码,子层,子层代码)VALUES('UE24205','L02021','7155031A','DUMMY')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500958','L12041','UE24205','L02021')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500958','L12041','UE24205','L12021')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500958','L12041','7155031A','DUMMY')
-----------测试数据--------------我的限制条件是:
1、父层代码前两位为‘L1’时,子层代码的前两位可以为‘L0’或‘L1’
2、父层代码前两位为‘L0’时,子层代码的前两位只能为‘L0’
3、子层代码为‘DUMMY’时是最底层的子层,不受1、2两个条件限制SELECT LEVEL AS LV,父层,父层代码,子层,子层代码 FROM WEBSKY.TEST111
start with 父层 like 'L500%'
connect by prior 子层=父层
以上是展开构成的语句,得到的结果为:LV 父层 父层代码 子层 子层代码
---------------------------------------------
1 L500957 L02041 UE24205 L02021
2 UE24205 L12021 7155031A DUMMY---(错误,L500957下没有子层代码为L12021的子层)
2 UE24205 L02021 7155031A DUMMY
1 L500957 L02041 7155031A DUMMY
1 L500958 L12041 UE24205 L12021
2 UE24205 L12021 7155031A DUMMY
2 UE24205 L02021 7155031A DUMMY
1 L500958 L12041 UE24205 L02021
2 UE24205 L12021 7155031A DUMMY--(重复数据)
2 UE24205 L02021 7155031A DUMMY--(重复数据)
1 L500958 L12041 7155031A DUMMY希望得到的结果为:LV 父层 父层代码 子层 子层代码
---------------------------------------------
1 L500957 L02041 UE24205 L02021
2 UE24205 L02021 7155031A DUMMY
1 L500957 L02041 7155031A DUMMY
1 L500958 L12041 UE24205 L12021
2 UE24205 L12021 7155031A DUMMY
2 UE24205 L02021 7155031A DUMMY
1 L500958 L12041 UE24205 L02021
1 L500958 L12041 7155031A DUMMY请问语句应该怎么写,谢谢各位英雄了
create table test111(父层 varchar2(20),父层代码 varchar2(20),子层 varchar2(20),子层代码 varchar2(20))
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500957','L02041','UE24205','L02021')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500957','L02041','7155031A','DUMMY')
insert into test111(父层,父层代码,子层,子层代码)VALUES('UE24205','L12021','7155031A','DUMMY')
insert into test111(父层,父层代码,子层,子层代码)VALUES('UE24205','L02021','7155031A','DUMMY')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500958','L12041','UE24205','L02021')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500958','L12041','UE24205','L12021')
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500958','L12041','7155031A','DUMMY')
-----------测试数据--------------我的限制条件是:
1、父层代码前两位为‘L1’时,子层代码的前两位可以为‘L0’或‘L1’
2、父层代码前两位为‘L0’时,子层代码的前两位只能为‘L0’
3、子层代码为‘DUMMY’时是最底层的子层,不受1、2两个条件限制SELECT LEVEL AS LV,父层,父层代码,子层,子层代码 FROM WEBSKY.TEST111
start with 父层 like 'L500%'
connect by prior 子层=父层
以上是展开构成的语句,得到的结果为:LV 父层 父层代码 子层 子层代码
---------------------------------------------
1 L500957 L02041 UE24205 L02021
2 UE24205 L12021 7155031A DUMMY---(错误,L500957下没有子层代码为L12021的子层)
2 UE24205 L02021 7155031A DUMMY
1 L500957 L02041 7155031A DUMMY
1 L500958 L12041 UE24205 L12021
2 UE24205 L12021 7155031A DUMMY
2 UE24205 L02021 7155031A DUMMY
1 L500958 L12041 UE24205 L02021
2 UE24205 L12021 7155031A DUMMY--(重复数据)
2 UE24205 L02021 7155031A DUMMY--(重复数据)
1 L500958 L12041 7155031A DUMMY希望得到的结果为:LV 父层 父层代码 子层 子层代码
---------------------------------------------
1 L500957 L02041 UE24205 L02021
2 UE24205 L02021 7155031A DUMMY
1 L500957 L02041 7155031A DUMMY
1 L500958 L12041 UE24205 L12021
2 UE24205 L12021 7155031A DUMMY
2 UE24205 L02021 7155031A DUMMY
1 L500958 L12041 UE24205 L02021
1 L500958 L12041 7155031A DUMMY请问语句应该怎么写,谢谢各位英雄了
解决方案 »
- 关于索引不生效的问题
- 高分求教问题:What happens to the HR session? What happens to the SYS session?
- oracle函数
- 关于oracle数据库查询时间
- 存储过程做表数据迁移
- 关于ORACLE联表查询的一个问题(有个字段是带有多个数据的),急~~~~~~
- ORA-12560问题,在线求解中......
- weblogic数据源挂起、自动恢复
- 有没有熟悉oracle7的专家,有急事请教!!!
- 兄弟姐妹们好,现有一Oracle备份恢复问题,望大家赐教(分可以再加)
- 请问高手:to_number to_char 用法?
- 急救!数据库导入出了大问题
2、父层代码前两位为‘L0’时,子层代码的前两位只能为‘L0’
3、子层代码为‘DUMMY’时是最底层的子层,不受1、2两个条件限制这些是SQL的限制条件?
start with 父层 like 'L500%'
connect by prior 子层=父层 and prior 子层代码=父层代码这样就可以拉!
1、父层代码前两位为‘L1’时,子层代码的前两位可以为‘L0’或‘L1’
2、父层代码前两位为‘L0’时,子层代码的前两位只能为‘L0’
3、子层代码为‘DUMMY’时是最底层的子层,不受1、2两个条件限制
---------------------------------------------
1 L500957 L02041 UE24205 L02021
2 UE24205 L02021 7155031A DUMMY
1 L500957 L02041 7155031A DUMMY
1 L500958 L12041 UE24205 L02021
2 UE24205 L02021 7155031A DUMMY
1 L500958 L12041 UE24205 L12021
2 UE24205 L12021 7155031A DUMMY
1 L500958 L12041 7155031A DUMMY这是我用这句sql运行出来的结果:SELECT LEVEL AS LV,父层,父层代码,子层,子层代码 FROM WEBSKY.TEST111
start with 父层 like 'L500%'
connect by prior 子层=父层 and prior 子层代码=父层代码
1 L500958 L12041 UE24205 L02021
会满足
connect by prior 子层=父层 and prior 子层代码=父层代码
吗?
start with 父层 like 'L500%'
当然会满足拉!所有父层 以'L500'开始的都满足。
connect by prior 子层=父层 and prior 子层代码=父层代码。
楼主你试试看。
L0L1是区分税别的,也就是说保税父层下不能存在增税子层,而增税父层下可以存在增税与保税的子层,所以,子层代码=父层代码 不行
楼主,你插入数据时
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500957','L02041','UE24205','L02021')
insert into test111(父层,父层代码,子层,子层代码)VALUES('UE24205','L12021','7155031A','DUMMY')
insert into test111(父层,父层代码,子层,子层代码)VALUES('UE24205','L02021','7155031A','DUMMY')
第一条insert是父层,代码是L0开始的,但通过
connect by prior 子层=父层 and prior 子层代码=父层代码 来connect父子层。所以只有你在加一句
insert into test111(父层,父层代码,子层,子层代码)VALUES('L500957','L02041','UE24205','L12021')-------子层代码为L1才会选错。
但你插入的数据是没错的,所以不可能会出现父层L0而子层L1的。这时你可以在插入数据时处理,不让插错。或者用pl/sql在查询时判断。