表有dm、updm 两个字段如下: 
   dm   updm
  0001   
  0002  0001
  0003  0001
  0004  0002
  0005  0004
  0010   
  0011  0010
  0012  0010
  
期望输出: 
  
   dm   updm   jb
  0001          1
  0002  0001    2
  0004  0002    3
  0005  0004    4
  0003  0001    2  
  0010          1
  0011  0010    2
  0012  0010    2
  
能用一句SQL写出吗?如何写?

解决方案 »

  1.   

    是树型结构啊
    用start with配合level可以生成JB,我去写个语句测试下
      

  2.   

    WITH a AS
         (SELECT '0001' dm, NULL updm
            FROM DUAL
          UNION ALL
          SELECT '0002', '0001'
            FROM DUAL
          UNION ALL
          SELECT '0003', '0001'
            FROM DUAL
          UNION ALL
          SELECT '0004', '0002'
            FROM DUAL
          UNION ALL
          SELECT '0005', '0004'
            FROM DUAL
          UNION ALL
          SELECT '0010', NULL
            FROM DUAL
          UNION ALL
          SELECT '0011', '0010'
            FROM DUAL
          UNION ALL
          SELECT '0012', '0010'
            FROM DUAL)SELECT     a.*, LEVEL jb
          FROM a
    START WITH updm IS NULL
    CONNECT BY PRIOR dm = updm
    结果
    Row# DM UPDM JB1 0001 1
    2 0002 0001 2
    3 0004 0002 3
    4 0005 0004 4
    5 0003 0001 2
    6 0010 1
    7 0011 0010 2
    8 0012 0010 2