如果是只有A表的话,直接使用level就肯定可以解决现在主要是有C表,它与A表有主从关系,所以比较复杂
解决方案 »
- oracle中有xml字段的还原。
- oracle 大量访问同一个存储过程
- 多个数据库间的访问问题。
- 各位大神,请教个oracle中functions 的问题。在线等。。。。。。。。。。。。。
- 联合查询结果字段合并显示的问题!
- 500元现金求一个oracle高手朋友
- 请问登陆的时候提示 "ERROR:ORA-07454: 队列超时,已超过0秒" 是哪的问题。
- 我的 listener为什么每次启动之后马上自动停止了啊?
- metalink.oracle.com 的帐号怎么得到?我想下oracle在linux中安装的补丁
- 我的机器(带有intel的HT技术的p4 2.6G)上怎么就装不起来oracle的呢?而我的同事的机器(p3的)上就可以呢?
- 向各位求救!連接各種(每種各版本)數據庫的連接字符串。
- oracle中varchar2的空格问题!
union
select c.id||'(bid)' id,'---'||b.bname from b,c where b.bid=c.bid;
无法正确体现层次关系,层次可能是多级
SELECT T.CID||'(AID)' ID,T.AID,T.ANAME,T.AFID,T.DEP FROM (
SELECT C.CID,A.AID,A.ANAME,B.BID,B.BNAME,A.AFID,DECODE(A.AFID,0,A.ANAME,(SELECT ANAME FROM AA WHERE AID=A.AFID)) DEP FROM CC C,BB B,AA A WHERE A.AID=C.AID AND B.BID=C.BID) T
UNION
SELECT TT.CID||'(CID)' ID,TT.BID AID,TT.BNAME ANAME,TT.AFID,TT.DEP FROM (
SELECT C1.CID,A1.AID,A1.ANAME,B1.BID,B1.BNAME,A1.AFID,DECODE(A1.AFID,0,A1.ANAME,(SELECT ANAME FROM AA WHERE AID=A1.AFID)) DEP FROM CC C1,BB B1,AA A1 WHERE A1.AID=C1.AID AND B1.BID=C1.BID) TT) ORDER BY DEP,ID,AFID
看看这个,有点麻烦,不过结果好像还成
SQL> SELECT * FROM AA; AID ANAME AFID
---------- ---------- ----------
1 财务部 0
2 安全部 0
3 会计处 1
4 保安处 2SQL> SELECT * FROM BB; BID BNAME
---------- ----------
1 张
2 李
3 王
4 孙SQL> SELECT * from cc; CID AID BID
---------- ---------- ----------
1 1 2
2 2 3
3 3 1
4 4 4SQL>
SQL> SELECT * FROM (
2 SELECT T.CID||'(AID)' ID,T.AID,T.ANAME,T.AFID,T.DEP FROM (
3 SELECT C.CID,A.AID,A.ANAME,B.BID,B.BNAME,A.AFID,DECODE(A.AFID,0,A.ANAME,(SELECT ANAME FROM AA WHERE AID=A.AFID)) DEP FROM CC C,BB B,AA A WHERE A.AID=C.AID AND B.BID=C.BID) T
4 UNION
5 SELECT TT.CID||'(CID)' ID,TT.BID AID,TT.BNAME ANAME,TT.AFID,TT.DEP FROM (
6 SELECT C1.CID,A1.AID,A1.ANAME,B1.BID,B1.BNAME,A1.AFID,DECODE(A1.AFID,0,A1.ANAME,(SELECT ANAME FROM AA WHERE AID=A1.AFID)) DEP FROM CC C1,BB B1,AA A1 WHERE A1.AID=C1.AID AND B1.BID=C1.BID) TT) ORDER BY DEP,ID,AFID
7 ;ID AID ANAME AFID DEP
--------------------------------------------- ---------- ---------- ---------- ----------
2(AID) 2 安全部 0 安全部
2(CID) 3 王 0 安全部
4(AID) 4 保安处 2 安全部
4(CID) 4 孙 2 安全部
1(AID) 1 财务部 0 财务部
1(CID) 2 李 0 财务部
3(AID) 3 会计处 1 财务部
3(CID) 1 张 1 财务部8 rows selectedSQL>
谢谢你的SQL,给我提示,帮我解决了问题
select decode(DM,'S',0,'M',aid-10000) id,lpad(aname,(level-1)*2+lengthb(aname),'-') name from
(select * from
(select 'S' DM,aid,aname,afid from a
union all
select 'M' DM,10000+c.cid,b.bname,a.aid from a,b,c
where b.bid=c.bid and a.aid=c.aid)
order by DM)
connect by prior aid=afid start with afid=0其中的一些函数的使用和自定义字段的增加是为了满足我自己的需求:)
beckhambobo(beckham)是通过MSN和我进行讨论和并帮助我写出了以上的sql语句!