2013-11-25 3 views
0

У меня есть таблица КОМПАНИ, как показано нижеGet Родитель дочерних записей 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 

и у меня есть таблица COMPANYMAPPING, как показано ниже

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 

я хочу, чтобы получить записи ребенка компании по каждой компании используя выше 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 

Я прошел через некоторые Butit рекурсивного 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

Смежные вопросы