也许你可以这样做
CREATE TABLE COA
(
COACode NVARCHAR(50),
ParentCode NVARCHAR(50),
COATitle VARCHAR(50),
)
INSERT INTO COA VALUES ('01', NULL,'Expense');
INSERT INTO COA VALUES ('01-01', '01','Expense');
INSERT INTO COA VALUES ('01-01-01','01-01' ,'Expense');
INSERT INTO COA VALUES ('01-01-02','01-01', 'Expense');
INSERT INTO COA VALUES ('01-02', '01','Expense');
INSERT INTO COA VALUES ('01-02-01','01-02' ,'Expense');
INSERT INTO COA VALUES ('01-02-02','01-02' ,'Expense');
;WITH x AS
(
-- anchor:
SELECT COACode, COATitle, ParentCode, [level] = 0
FROM COA WHERE ParentCode IS NULL
UNION ALL
-- recursive:
SELECT t.COACode, t.COATitle, t.ParentCode, [level] = x.[level] + 1
FROM x INNER JOIN COA AS t
ON t.ParentCode = x.COACode
)
SELECT COACode, COATitle, ParentCode, [level] FROM x
ORDER BY [level]
OPTION (MAXRECURSION 32);