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

由于表中已经存储了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

最新更新