2013-11-25 2 views
0

나는이 회사 테이블처럼 나는 각각의 모든 회사의 하위 회사 기록을 얻으려면 가져 오기 부모 자식 레코드의 SQL 서버 2008

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 테이블이

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 

이하 및 위의 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의라나! - 클로이이에 맞는 아니에요, 나는 부모의 자녀 (다중 레벨) 레코드의 여러 세트를, 그래서 나는 순서에 대한

답변

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

덕분에 모든 레코드를 가져 오기 위해 질의를 필요로 응답, 그러나 이것은 적절한 결과를 제공하지 않습니다, 왜 CompanyMapId를 CompanyId로 사용합니까 – user2212827

+0

@ user2212827 죄송합니다. 고정 –

+0

감사합니다. 완벽합니다. – user2212827

관련 문제