有条件获取数据函数

cqdj 2010-05-18 05:34:01
有如下一张表:(代码如下),现在想得到的效果是:
如果我现在表中存在0101,则连Acode等于01的数据一同显示出来(表中允许存在01的数据但不一定有下级数据,也就是用它的Acode值作为Apcode),如果没有,则连Acode等于01的也不显示。

create table tmpa as
select '01' as Acode ,'分组1' as Aname,'' as Apcode from dual;
union all
select '0101' as Acode ,'A1' as Aname,'01' as Apcode from dual;
union all
select '0102' as Acode ,'A2' as Aname,'01' as Apcode from dual;
union all
select '02' as Acode ,'分组2' as Aname,'' as Apcode from dual;
union all
select '0201' as Acode ,'B1' as Aname,'02' as Apcode from dual;
union all
select '0202' as Acode ,'B2' as Aname,'02' as Apcode from dual;
union all
select '0203' as Acode ,'B3' as Aname,'02' as Apcode from dual;
union all
select '03' as Acode ,'分组2' as Aname,'' as Apcode from dual;
union all
select '0301' as Acode ,'C1' as Aname,'03' as Apcode from dual;
union all
select '0302' as Acode ,'C2' as Aname,'03' as Apcode from dual;
union all
select '0303' as Acode ,'C3' as Aname,'03' as Apcode from dual;

...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
etsilence 2010-05-18
  • 打赏
  • 举报
回复
还是没看明白LZ的要求,你执行下这个查询
select acode,aname,apcode,level from tmpa start with acode ='0301'
connect by prior apcode=acode;

看看是不是你要的结果。
cqdj 2010-05-18
  • 打赏
  • 举报
回复
这样一个函数:输入,0301,得到的结果是两条记录,一条是acode=0301,另外就是它的上级,acode是它apcode的那条,这种记录的级次不定,比如说可能acode=0301的下面还有子记录,如果输入“0304“,因为0304不存在,所以一条记录都不返回。
iqlife 2010-05-18
  • 打赏
  • 举报
回复
你以上数据想要得到什么样子的数据结果?
心中的彩虹 2010-05-18
  • 打赏
  • 举报
回复

--本人想的不知道是你的意思不
select Acode,Aname,Apcode from tmpa
where Acode='0101' and instr(Acode,Apcode)>0

cqdj 2010-05-18
  • 打赏
  • 举报
回复
补充一下:最好不要采用分区函数

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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