2013-11-25 85 views
0

我公司有表像下面獲取親子記錄SQL Server 2008中

CompanyID CompanyName 

1   xyz 
2   xyz-c 
3   xyz-c1 
4   xyz-c2 
5   xyz-c-c 
6   xyz-c-c1 
7   xyz-c-c2 
8   xyz-c-c1-c 
9   xyz-c-c1-c1 
10   xyz-c-c1-c2 

和我有類似下面

CompanyMapID ParentCompanyID ChildCompanyID 
    1     1    2    
    2     1    3    
    3     1    4    
    4     2    5    
    5     2    6    
    6     2    7    
    7     6    8    
    8     6    9    
    9     6    10    
10     11    12 

我想每個公司的子公司記錄COMPANYMAPPING表通過使用上面的2表,正是我想要得到如下結果

CompanyID CompanyName   Level 
1    xyz    0 
2    xyz-c   1 
3    xyz-c1   1 
4    xyz-c2   1 
5    xyz-c-c   2 
6    xyz-c-c1   2 
7    xyz-c-c2   2 
8    xyz-c-c1-c  3 
9    xyz-c-c1-c1  3 
10    xyz-c-c1-c2  3 

我經歷了一些遞歸CTE的butit不是裝修成這樣,我擁有多套父子(多層次)記錄的,所以我需要一個查詢,以

回答

0
with cte as (
    select C.CompanyID, 0 as Level 
    from COMPANY as C 
    where C.CompanyID not in (select T.ChildCompanyID from COMPANYMAPPING as T) 

    union all 

    select C.ChildCompanyID as CompanyID, A.Level + 1 as Level 
    from cte as A 
     inner join COMPANYMAPPING as C on C.ParentCompanyID = A.CompanyID 
) 
select 
    C.CompanyID, C.CompanyName, A.Level 
from cte as A 
    inner join COMPANY as C on C.CompanyID = A.CompanyID 

sql fiddle demo

+0

感謝獲取所有記錄迴應,但是這並沒有給出正確的結果,爲什麼你使用CompanyId作爲CompanyId – user2212827

+0

@ user2212827對不起,修正 –

+0

謝謝,這是完美的 – user2212827