MSSQL
WITH TTT(FLEVEL,
FACCTNAME,
FACCTCODE,
FACCTPARENT) AS
(SELECT 1 AS FLEVEL, FACCTNAME, FACCTCODE, FACCTPARENT
FROM A2015003LACCOUNT T1
WHERE FACCTPARENT = ' '
UNION ALL
SELECT T1.FLEVEL + 1 AS FLEVEL, T2.FACCTNAME, T2.FACCTCODE, T2.FACCTPARENT
FROM TTT T1
INNER JOIN A2015003LACCOUNT T2
ON T1.FACCTCODE = T2.FACCTPARENT)
SELECT FLEVEL,
REPLICATE(' ', (FLEVEL - 1) * 5) + FACCTNAME AS FACCTNAMETREE,
FACCTNAME,
FACCTCODE,
FACCTPARENT
FROM TTT
ORDER BY FACCTCODE, FLEVEL
ORACLE
使用LEVEL……START WITH ……CONNECT BY PRIOR ……
SELECT LEVEL,
LPAD(' ', (LEVEL - 1) * 5, ' ') || FACCTNAME AS FACCTNAMETREE,
FACCTNAME,
FACCTCODE,
FACCTPARENT
FROM A2016001LACCOUNT
START WITH FACCTPARENT = ' '
CONNECT BY PRIOR FACCTCODE = FACCTPARENT