|
不知道有没有理解错楼主的意思
WITH X AS
(SELECT '1' AS id, '' AS pid, 'TEST' AS treeNm, '李明' AS userName FROM dual
UNION
SELECT '2' AS id, '1' AS pid, 'TEST\AA' AS treeNm, '何思可' AS userName FROM dual
UNION
SELECT '3' AS id, '2' AS pid, 'TEST\AA\BB' AS treeNm, '何思可' AS userName FROM dual
UNION
SELECT '4' AS id, '3' AS pid, 'TEST\AA\BB\CC' AS treeNm, '何思可' AS userName FROM dual
UNION
SELECT '5' AS id, '3' AS pid, 'TEST\AA\BB\DD' AS treeNm, '吴小明' AS userName FROM dual
UNION
SELECT '6' AS id, '4' AS pid, 'TEST\AA\BB\DD\EE' AS treeNm, '吴小明' AS userName FROM dual
UNION
SELECT '7' AS id, '4' AS pid, 'TEST\AA\BB\DD\JJ11' AS treeNm, '吴小明' AS userName FROM dual
UNION
SELECT '8' AS id,'4' AS pid, 'TEST\AA\BB\DD\EE22' AS treeNm, '何思可' AS userName FROM dual),
Y(
ID,PID,TREENM,USERNAME,USERNAME_C) AS
(SELECT a.*,a.username username_c
from x a
where id=(SELECT min(pid) from x )
UNION ALL
SELECT x.ID,x.PID,x.TREENM,x.USERNAME,case when y.username=x.USERNAME then y.username_c else y.username end username_c
from y,x
WHERE y.id=x.pid)
SELECT * FROM y |
|