WITH CTE
AS
(
--基本语句
SELECT F_ID,F_PID,F_GUID,F_PGUID,F_NAME,F_LEVEL,F_IS_LEAF,F_ORDER_NO,
TO_CHAR(F_LEVEL*10000+F_ORDER_NO) NEWORDER
FROM #Result
WHERE F_PGUID IS NULL
UNION ALL
--递归语句
SELECT s.F_ID,s.F_PID,s.F_GUID,s.F_PGUID,s.F_NAME,s.F_LEVEL,s.F_IS_LEAF,s.F_ORDER_NO
TO_CHAR(CONCAT(p.NEWORDER,'.',TO_CHAR(s.F_LEVEL*10000+s.F_ORDER_NO))) NEWORDER
FROM #Result s INNER JOIN CTE p ON s.F_PGUID = p.F_GUID
)
SELECT * FROM CTE
SQL的 递归操作。
如上代码说明,表中利用PGUID和GUID实现父子关联。
第一个select是递归的开始节点,第二个节点是递归的主题部分。
最后一个select是递归输出。
此例子,利用递归构造了一个NEWORDER