sql-server – SQL Server CTE – 找到顶部parentID forEach chi
我有一个包含层次结构数据的表,如:
childID | parentID ____________________ 1 | 5 5 | 9 9 | 20 2 | 4 3 | 7 7 | 8 8 | 8 20 | 20 4 | 4 8 | 8 所需输出: 我创建了一个递归CTE,它发现我是顶级的fatherID. 就像是 : ;WITH cte AS ( SELECT a.childID,a.parentID,1 AS lvl FROM [Agent_Agents] a WHERE a.childID = 214 //<==== value to begin with !! - thats part the problem UNION ALL SELECT tmp.childID,tmp.parentID,cte.lvl+1 FROM [Agent_Agents] tmp INNER JOIN cte ON tmp.childID = cte.parentID WHERE cte.childID<>cte.parentID ) SELECT * FROM cte WHERE lvl = ( SELECT MAX(lvl) FROM cte ) 问题 : 我执行CTE与显式的childID值从(214)开始! 但 我尝试用CROSS应用程序: 就像是 : select * from myTable Cross Apply ( ;WITH cte AS (....) ) 但IMHO(从我的测试!!) – 它不可能. 将递归CTE放在UDF中的另一个想法具有性能损失(udf的问题,我们知道). 我如何创建这个查询,使其实际工作? (或一些附近的解决方案)? 这是ive试过的 http://data.stackexchange.com/stackoverflow/query/edit/69458 解决方法不知道我明白你在找什么,但可能是这样.;WITH c AS (SELECT childid,parentid,parentid AS topParentID FROM @myTable WHERE childid = parentid UNION ALL SELECT T.childid,T.parentid,c.topparentid FROM @myTable AS T INNER JOIN c ON T.parentid = c.childid WHERE T.childid <> T.parentid) SELECT childid,topparentid FROM c ORDER BY childid SE-Data 与marc_s answer相同,区别在于我使用您的表变量,并且您的根节点具有childID = parentID的事实,其中由marc_s的答案对根节点具有parent_ID = null.在我看来,根节点的parent_ID = null最好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |