別名之 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 --------------------------------------------------