create table tab(
ItemId int,
ParentId int,
Name varchar(10),
QtyAvailable int);
insert into tab (
ItemId,
ParentId,
Name,
QtyAvailable)
select
1 as ItemId,
null as ParentId,
'Package A' as Name,
10 as QtyAvailable
union all
select
2,
1,
'Item 1',
2
union all
select
3,
1,
'Item 2',
3;
with
subquery_cte as (
select
coalesce(ParentId, ItemId) as Id,
case
when
ParentId is null
then
Name
else
null
end as Name,
sum(QtyAvailable) as QtyAvailable
from
tab
group by
coalesce(ParentId, ItemId),
case
when
ParentId is null
then
Name
else
null
end)
select
min(Name) as Name,
sum(QtyAvailable) as QtyAvailable
from
subquery_cte
group by
Id;
drop table tab;
Assuming, you mean simple parent-child relation, this is just a bit different solution. I believe it's rather efficient because references the table only once.