高分求助一简单问题,描述特详细,分不够再加

spiderleon 2006-09-13 10:46:03
-----------测试数据--------------
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

请问语句应该怎么写,谢谢各位英雄了。。。
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iflang 2006-09-13
  • 打赏
  • 举报
回复
这是什么啊。。。有点晕哟
spiderleon 2006-09-13
  • 打赏
  • 举报
回复
如果加上父层代码跟子层代码来做条件限制的话,是可以的呀
比如加个SUBSTR(父层代码,1,2)=SUBSTR(子层代码,1,2)的条件就可以保证父子层代码前两位相等,但我不知道应该怎样使这几个条件并存
snowy_howe 2006-09-13
  • 打赏
  • 举报
回复
楼主你依靠父层和子层作为关系连接树结构,同时还要判断他们的代码。
如果是人的话,自然可以看出'UE24205','L02021'和'UE24205','L12021'
是两条不同的记录,而计算机怎么可能知道呢????
还必须要你告诉它才行啊。
我建议用“父层||父层代码”和“子层||子层代码”的方式来做连接。
wiler 2006-09-13
  • 打赏
  • 举报
回复
你只用子层=父层不能唯一确定记录
再加上子层代码=父层代码才行
wiler 2006-09-13
  • 打赏
  • 举报
回复
在另一边已经解决拉,:)

SELECT LEVEL AS LV,父层,父层代码,子层,子层代码 FROM WEBSKY.TEST111
start with 父层 like 'L500%'
connect by prior 子层=父层 and prior 子层代码=父层代码

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧