serviceId(服务)  prePmServiceId(前置服务)   
  服务1                   null
  服务2                   服务1
  服务3                   服务2
如何根据这一的关联
写成这一的结果
serviceId(服务)  prePmServiceId(前置服务)   服务步骤
  服务1                   null                     1
  服务2                   服务1                    2
  服务3                   服务2                    3
服务步骤是根据关联得出的
如何用oracle sql 语句算出

解决方案 »

  1.   


    with tab AS(
    SELECT '服务1' serviceId, NULL prePmServiceId FROM dual
    UNION ALL
    SELECT '服务2', '服务1' FROM dual UNION ALL 
    SELECT '服务3', '服务2' FROM dual
    )
    SELECT serviceId,prePmServiceId,LEVEL 
    FROM tab 
    START WITH prePmServiceId IS NULL
    CONNECT BY PRIOR serviceId=prePmServiceId
    SERVICEID  PREPMSERVICEID  LEVEL
    ------------------------------------------
    服务1                       1
    服务2      服务1            2
    服务3      服务2            3
      

  2.   


    --connect by 递归树状结构的查询,level代表节点,即层级
    select serviceid,prepmserviceid,level  --level代表节点
    from tab 
    start with prepmserviceid is null  --起始节点,即根节点
    connect by prior serviceid=prepmserviceid  --构造条件
      

  3.   

    SQL> with tb as(
      2  select  '服务1' serviceId, null prePmServiceId from dual union all
      3   select   '服务2', '服务1' from dual union all
      4   select   '服务3', '服务2' from dual )
      5    select serviceId,prePmServiceId,level
      6    from tb
      7    start with serviceId='服务1'
      8    connect by  prePmServiceId= prior serviceId
      9  /
     
    SERVICEID PREPMSERVICEID      LEVEL
    --------- -------------- ----------
    服务1                             1
    服务2     服务1                   2
    服务3     服务2                   3