2017-04-25 8 views
0

このCTEは、SuiteIDおよびParentSuiteIDの階層を次の結果セットとしてフェッチします。私はSuiteIDとそれぞれのレベルの親であるSuiteIDを渡したいと思います。私は(SuiteID = 11100)を渡すときは、次の結果セットを与えるクエリを書きたいツリー内の任意のノードの階層を再帰的に生成しますか?

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 |   Title   | ParentSuiteID | Level | 
    +---------+------------------------+---------------+-------+ 
    | 10664 | root     |    0 |  0 | 
    | 10681 | Prod Test Environment |   10664 |  1 | 
    | 11097 | Dev Test Environment |   10664 |  1 | 
    | 11155 | Training Environment |   10664 |  1 | 
    | 11156 | Production Environment |   10664 |  1 | 
    | 11100 | Bridge PMS    |   11097 |  2 | 
    | 11126 | Bridge PTS    |   11097 |  2 | 
    | 11139 | Client 360    |   11097 |  2 | 
    | 11140 | Contact Manager  |   11097 |  2 | 
    | 11145 | Revenue DashBoard  |   11097 |  2 | 
    | 11141 | Finance flow   |   11140 |  3 | 
    | 11142 | Premium Finance flow |   11140 |  3 | 
    | 11143 | Client Contacts  |   11140 |  3 | 
    | 11127 | Direct Bill   |   11126 |  3 | 
    +---------+------------------------+---------------+-------+ 

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

答えて

1
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 [email protected] 
     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 
+0

はあなたのジョンをありがとうちょうど私が探していたものです。 – Sharktooth

+0

@Sharktoothハッピー・イズ・ヘルプ –

関連する問題