当前位置: 代码迷 >> Sql Server >> 求1SQL递归算法
  详细解决方案

求1SQL递归算法

热度:36   发布时间:2016-04-24 09:46:16.0
求一SQL递归算法
数据示例:


DROP TABLE #

SELECT *
INTO # FROM (
SELECT 'A' A,'B' B UNION 
SELECT 'B','C' UNION 
SELECT 'C','D' UNION
SELECT 'E','F' UNION 
SELECT 'F','G'  

)Z


SELECT *
FROM #



我的要求就是想要的结果是:谢谢!!!在线等待.

SELECT 'A' A,'B' B,0 AS [level],'A' AS ParentName UNION 
SELECT 'B','C',1,'A' UNION 
SELECT 'C','D',2,'A' UNION
SELECT 'E','F',0,'E' UNION 
SELECT 'F','G',1,'E'   

------解决思路----------------------
SELECT *
INTO # FROM (
SELECT 'A' A,'B' B UNION 
SELECT 'B','C' UNION 
SELECT 'C','D' UNION
SELECT 'E','F' UNION 
SELECT 'F','G'  
 
)Z
 
;WITH Cte
AS(
SELECT *,[Level]=0 FROM # AS a WHERE NOT EXISTS(SELECT 1 FROM # WHERE B=a.A)
UNION ALL
SELECT a.*,[Level]=b.[Level]+1 FROM # AS a INNER JOIN Cte AS b ON b.B=a.A
)
SELECT * FROM Cte ORDER BY 1
/*
A B 0
B C 1
C D 2
E F 0
F G 1*/

------解决思路----------------------
SQL2005有效
;WITH CTE AS(
SELECT T1.*,0[LEVEL],T1.A [ParentName] FROM # T1 LEFT JOIN # T2 ON T1.A=T2.B WHERE T2.A IS NULL
UNION ALL
SELECT T1.*,T2.[LEVEL]+1,T2.[ParentName] FROM # T1 JOIN CTE T2 ON T1.A=T2.B
)
SELECT * FROM CTE ORDER BY A
  相关解决方案