我有一个包含三列的表。该表包含"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