Довольно легко определить каждого пользователя, у которого есть дети. Следующее начинается с определения количества детей, но в финальном выпуске (с другими столбцами от пользователя) просто сводится к следующему: «Есть ли дети?»
/************************* Set up sample data *************************/
declare @User table (
UserId int,
UserName varchar(10)
)
insert @User
select 1, 'A' union all
select 2, 'B' union all
select 3, 'C'
declare @ParentUser table (
UserId int,
ParentId int
)
insert @ParentUser
select 3, 1 union all
select 3, 2 union all
select 2, 1
/****************************** Solution ******************************/
;with ChildCounts as (
select p.ParentId, COUNT(*) as ChildCount
from @ParentUser p
group by p.ParentId
), UsersWithHasChildren as (
select u.*,
case
when p.ChildCount > 0 then 1
else 0
end as HasChildren
from @User u
left join ChildCounts p on
p.ParentId = u.UserId
)
select *
from UsersWithHasChildren u
Вашего дубликат вопрос, в частном случае определения того, какие дети конкретного родителя тоже есть дети тривиальный WHERE
фильтр, как показано ниже.
where u.UserId in (
select p.UserId
from @ParentUser p
where p.ParentId = 1 /*Parametrise this value*/
)
Это не работает properly.One моих пользователей с именем А имеет несколько детей, но само по себе является потомком другого пользователя по имени B.Your запрос возвращает 0 для 1, но для B. –
@HamidReza - вы можете добавить пример данных и ожидаемый результат –
Я обновил вопрос. –