别名之 SQL>with temp as (select name form test_sysconnectbypath); 这是别名的写法,我们下面的sql语句就可以用temp来代替这个结果集。当然这个()里面可以是你自己的复杂查询出来的结果集也行 第一变性开始,把这个变成有树形结构的 怎么才能变形成树结构了,大家马上想到,加一个pid,和id才行哟,这里没有,我们就给他们加上吧。不过,加了id,怎么来填他们的结构数据呢,这里需要另一个函数显圣了 lag() , lag() 是取前记录, 和lead相对, 如果是简单的拼的话,树结构不就是,上一条记录就是下一条记录的父节点了么 这样我们用rownum,不就.... OK了 action select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp) t; 结果出来了
NAME NO PID -------------------- ---------- ----------
深圳 1 武汉 2 1 上海 3 2 北京 4 3 天津 5 4 新加坡 6 5
现在就是个树形了吧。 再变树 action select * from (select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp)) t start with pid is null connect by prior no=pid; 看看结果吧
奇怪结果没有变哟,是的,这里只是把树给选出来了,你如果加个lpad(' ', 4*level, '*')||name就可以看出端倪了 最后一变,拼成串 select sys_connect_by_path(name. ',') text from (select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp)) t start with pid is null connect by prior no=pid; 你们自己看结果吧。 Text --------------------------------------------------