2015-09-07 3 views
0

У меня есть таблица, где я хранящая MemberID и InvitationToIDSQL Server КТР Рекурсия

Я хочу знать, сколько членов находятся под меня до 6-го уровня.

MemberID InvitedTO 
-------- --------- 
1   3   
1   2   
1   4   
2   a   
2   b   
3   c   
3   d   
a   aa   
b   bb   
aa   ccc 

Если я прохожу MemberID = 1, то я должен получить весь ребенок InvitationToID из 3,2,4 и также там детей до 6-го уровня.

Я использую этот КТР, но он показывает ошибку:

with Userct as 
(
    select 
     ps.InvitedTO, ps.MemberID, 0 as steps 
    from 
     Pointsystem ps 
    where 
     ps.MemberID = '1' 

    Union all 

    select 
     Userct.InvitedTO, Userct.MemberID, Userct.steps + 1 
    from 
     Userct 
) 
select * 
from Userct er 
inner join Pointsystem pr on pr.InvitedTO = er.MemberID 

, как я могу получить все приглашения до 6-го уровня.

+1

Сообщение об ошибке, пожалуйста, писать он не работает, не поможет. – lad2025

ответ

2

Вы должны иметь INNER JOINвнутри вашего КТР, чтобы включить рекурсию:

with UserCTE as 
(
    select 
     ps.InvitedTO, ps.MemberID, 0 as steps 
    from 
     Pointsystem ps 
    where 
     ps.MemberID = '1' 

    Union all 

    select 
     pr.InvitedTO, pr.MemberID, u.steps + 1 
    from 
     UserCTE u 
    inner join 
     Pointsystem pr on pr.MemberID = u.InvitedTo 
) 
select * 
from UserCTE 
where steps <= 6 
+0

Не выдавая правильного вывода, он выполняет только 1-й уровень приглашений. –

+0

@RameshYadav: Хорошо, я «обернулся» по условию соединения во второй половине CTE - это работает? –

+0

да, что сработало спасибо много .. –

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