Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 递归生成树中任何给定节点的层次结构?_Sql_Sql Server_Database_Sql Server 2008 - Fatal编程技术网

Sql 递归生成树中任何给定节点的层次结构?

Sql 递归生成树中任何给定节点的层次结构?,sql,sql-server,database,sql-server-2008,Sql,Sql Server,Database,Sql Server 2008,此CTE获取SuiteID和ParentSuiteID的层次结构,作为下面的结果集。我想通过SuiteID和所有SuiteID,它们是各自级别的家长 WITH HIERARCHY AS ( select T1.SuiteID,T1.Title,T1.ParentSuiteID, 0 Level FROM tbl_Suite(nolock) T1 Where T1.ParentSuiteID = 0 AND T1.PlanID = '404' UNION ALL select T

此CTE获取SuiteID和ParentSuiteID的层次结构,作为下面的结果集。我想通过SuiteID和所有SuiteID,它们是各自级别的家长

WITH HIERARCHY AS
( select T1.SuiteID,T1.Title,T1.ParentSuiteID, 0 Level 
  FROM tbl_Suite(nolock) T1
  Where T1.ParentSuiteID = 0 AND T1.PlanID = '404'
  UNION ALL
  select T2.SuiteID,T2.Title,T2.ParentSuiteID,Level+1 
  from tbl_Suite(nolock) AS T2
  INNER JOIN HIERARCHY AS H ON T2.ParentSuiteID = H.SuiteID
)

SELECT * 
FROM HIERARCHY
我想编写一个查询,当我传递SuiteID=11100时,该查询将给出以下结果集:

SuiteID Title ParentSuiteID Level 10664 root 0 0 11097 Dev Test Environment 10664 1 11100 Bridge PMS 11097 2 返回

Lvl SuiteID ParentSuiteID   Title
0   10664   0               root                   
1   11097   10664           Dev Test Environment   
2   11100   11097           Bridge PMS

谢谢你,约翰,这正是我要找的。@Sharktooth很高兴能帮上忙
Declare @Table table (SuiteID  int,Title varchar(50),ParentSuiteID int)
Insert into @Table values 
(10664 ,'root                   ',    0),
(10681 ,'Prod Test Environment  ',10664 ),
(11097 ,'Dev Test Environment   ',10664 ),
(11155 ,'Training Environment   ',10664 ),
(11156 ,'Production Environment ',10664 ),
(11100 ,'Bridge PMS'             ,11097 )


Declare @Fetch int = 11100   

;with cteHB as (
      Select SuiteID 
            ,ParentSuiteID
            ,Lvl=1
            ,Title 
      From   @Table 
      Where  SuiteID =@Fetch
      Union  All
      Select R.SuiteID 
            ,R.ParentSuiteID
            ,P.Lvl+1
            ,R.Title 
      From   @Table R
      Join   cteHB P on P.ParentSuiteID = R.SuiteID )
Select Lvl = Row_Number() over (Order By Lvl Desc) -1
      ,SuiteID 
      ,ParentSuiteID
      ,Title
From cteHB
Order By 1
Lvl SuiteID ParentSuiteID   Title
0   10664   0               root                   
1   11097   10664           Dev Test Environment   
2   11100   11097           Bridge PMS