部门表 a字段 id parentid name level
01 00 湖南 1
02 00 江西 1
0101 01 长沙 2
010101 0101 长沙县 3
0201 02 南昌 2
020101 0201 新建县 3
要求查询出结果:
湖南
长沙
长沙县
江西
南昌
新建县
...
01 00 湖南 1
02 00 江西 1
0101 01 长沙 2
010101 0101 长沙县 3
0201 02 南昌 2
020101 0201 新建县 3
要求查询出结果:
湖南
长沙
长沙县
江西
南昌
新建县
...
WITH a AS
(SELECT '01' ID, '00' parentid, '湖南' NAME, 1 level_1
FROM DUAL
UNION ALL
SELECT '02', '00', '江西', 1
FROM DUAL
UNION ALL
SELECT '0101', '01', '长沙', 2
FROM DUAL
UNION ALL
SELECT '010101', '0101', '长沙县', 3
FROM DUAL
UNION ALL
SELECT '0201', '02', '南昌', 2
FROM DUAL
UNION ALL
SELECT '020101', '0201', '新建县', 3
FROM DUAL)
SELECT decode(level_1,1,name,LPAD (NAME, LENGTHb (NAME) + LEVEL_1*2 , ' ')) name
FROM a
START WITH parentid = '00'
CONNECT BY PRIOR ID = parentid结果
Row# NAME1 湖南
2 长沙
3 长沙县
4 江西
5 南昌
6 新建县其实你不需要加level字段,这里我测试数据之所以写level_1,是因为系统本身有level是保留字,不能用的