別名之 SQL>with temp as (select name form test_sysconnectbypath); 這是別名的寫法,我們下面的sql語句就可以用temp來代替這個結(jié)果集。當然這個()里面可以是你自己的復雜查詢出來的結(jié)果集也行 第一變性開始,把這個變成有樹形結(jié)構(gòu)的 怎么才能變形成樹結(jié)構(gòu)了,大家馬上想到,加一個pid,和id才行喲,這里沒有,我們就給他們加上吧。不過,加了id,怎么來填他們的結(jié)構(gòu)數(shù)據(jù)呢,這里需要另一個函數(shù)顯圣了 lag() , lag() 是取前記錄, 和lead相對, 如果是簡單的拼的話,樹結(jié)構(gòu)不就是,上一條記錄就是下一條記錄的父節(jié)點了么 這樣我們用rownum,不就.... OK了 action select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp) t; 結(jié)果出來了
NAME NO PID -------------------- ---------- ----------
深圳 1 武漢 2 1 上海 3 2 北京 4 3 天津 5 4 新加坡 6 5
現(xiàn)在就是個樹形了吧。 再變樹 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; 看看結(jié)果吧
奇怪結(jié)果沒有變喲,是的,這里只是把樹給選出來了,你如果加個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; 你們自己看結(jié)果吧。 Text --------------------------------------------------