PL / SQL层次排序

米霍克

我有一个包含三列的表。该表包含“ ID,NAME,ADMIN”值。

示例表

ID      NAME       ADMIN
200      A          1
300      B          2
400      C          3
500      D          1
600      E          3 

现在,我想让它们进入“ ADMIN”命令的文本区域。在文本区域中,它们应该像

A
D
  B
    C
    E

我已经尝试过类似的方法,但是没有用。

SELECT a.id, REPLACE (LPAD (' ', (LEVEL - 1) * 4, ' '), ' ', ' ') || a.name
FROM (SELECT   *
      FROM my_table a
      ORDER BY a.name, a.admin)
CONNECT BY a.admin > PRIOR a.admin
START WITH a.admin IS NULL
Lalit Kumar B

由于您已经将LEVEL作为ADMIN存储在表中,因此不需要CONNECT BY子句。您只需要使用LPAD格式化输出即可

例如,

设置

CREATE TABLE t
    (ID NUMBER, NAME VARCHAR2(1), ADMIN NUMBER);

INSERT ALL 
    INTO t (ID, NAME, ADMIN)
         VALUES (200, 'A', 1)
    INTO t (ID, NAME, ADMIN)
         VALUES (300, 'B', 2)
    INTO t (ID, NAME, ADMIN)
         VALUES (400, 'C', 3)
    INTO t (ID, NAME, ADMIN)
         VALUES (500, 'D', 1)
    INTO t (ID, NAME, ADMIN)
         VALUES (600, 'E', 3)
SELECT * FROM dual;

询问

SQL> SELECT lpad(' ',2*(ADMIN-1)) || NAME name_hierarchy FROM t ORDER BY ADMIN, NAME;

NAME_HIERARCHY
--------------------------------------------------------------------------------
A
D
  B
    C
    E

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章