資料庫開發基礎--層次查詢+

lff1530983327發表於2015-03-23

with bus as

 (select 'A' dstart, 'B' dend, '120' distance

    from dual

  union all

  select 'B' dstart, 'C' dend, '200' distance

    from dual

  union all

  select 'A' dstart, 'D' dend, '150' distance

    from dual

  union all

  select 'D' dstart, 'M' dend, '300' distance

    from dual

  union all

  select 'C' dstart, 'E' dend, '180' distance

    from dual

  union all

  select 'F' dstart, 'M' dend, '260' distance from dual)

select level,

       connect_by_root dstart,

       dend,

       distance,

       SYS_CONNECT_BY_PATH(dstart, '->'),

       SYS_CONNECT_BY_PATH(dstart, '->') || '->' || dend,

       lead(distance,level-1)over(partition by level order by level)

 

  from bus

 start with dstart is not null

connect by (prior dend = dstart);

資料庫開發基礎--層次查詢+ 

  -----------------------------------------------

  with bus as

(

select 'A' dstart, 'B' dend, '120' distance from dual union all

select 'B' dstart, 'C' dend, '200' distance from dual union all

select 'A' dstart, 'D' dend, '150' distance from dual union all

select 'D' dstart, 'M' dend, '300' distance from dual union all

select 'C' dstart, 'E' dend, '180' distance from dual union all

select 'F' dstart, 'M' dend, '260' distance from dual 

)

select * from  bus;

  ------------------------------------------

with bus as

(

select 'A' dstart, 'B' dend, '120' distance from dual union all

select 'B' dstart, 'C' dend, '200' distance from dual union all

select 'A' dstart, 'D' dend, '150' distance from dual union all

select 'D' dstart, 'M' dend, '300' distance from dual union all

select 'C' dstart, 'E' dend, '180' distance from dual union all

select 'F' dstart, 'M' dend, '260' distance from dual 

)

select dstart, wmsys.wm_concat(dend)  from bus group by dstart

 

--------------------------

with bus as

(

select 'A' dstart, 'B' dend, '120' distance from dual union all

select 'B' dstart, 'C' dend, '200' distance from dual union all

select 'A' dstart, 'D' dend, '150' distance from dual union all

select 'D' dstart, 'M' dend, '300' distance from dual union all

select 'C' dstart, 'E' dend, '180' distance from dual union all

select 'F' dstart, 'M' dend, '260' distance from dual 

)

select dstart,dend, CONNECT_BY_ISLEAF isleaf, 

 

sys_connect_by_path(dstart, '->')||'-'||dend "Path" 

 

FROM bus 

 

START WITH dstart IS NOT NULL 

 

CONNECT BY PRIOR  dend =dstart; 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30018455/viewspace-1470492/,如需轉載,請註明出處,否則將追究法律責任。

相關文章