Ok...I am a little confused as to what you are asking. Shouldn't product 5 have in progress of 2 if you are doing a count? Or are you just trying to get a 1 if any are in progress.
Try this...
select w1.work as work, count(*) countInProgress
from work w1
inner join work w2 on w1.work = w2.parent
where w2.status = 'In Progress'
group by w1.work
or this if you want to include the in progress of the parent as well.
select workItem, count(*) countInProgress from
(
select work, @workItem := if(parent is not null,parent,work) workItem
, status
from work
) t
where status = 'In Progress'
group by workItem
Either way the question is a little unclear. How does product 2 have a wip task "In Progress" but is not in progress itself?
Build script
CREATE TABLE work (work varchar(20), parent varchar(20), status varchar(20));
INSERT INTO work VALUES
('Product 1',null,'In Progress'),
('Service', 'Product 1','Completed'),
('Delivery', 'Product 1', 'In Progress'),
('Transportation', 'Product 1', 'Completed'),
('Product 2',null,'In Progress'),
('Service', 'Product 2',''),
('Delivery', 'Product 2', 'In Progress'),
('Transportation', 'Product 2', ''),
('Product 3',null,'Completed'),
('Product 4',null,'In Progress'),
('Product 5',null,'In Progress'),
('Delivery', 'Product 5', 'In Progress'),
('Transportation', 'Product 5', 'In Progress')
sqlfiddle link if you want to play with it...
http://sqlfiddle.com/#!9/e0fa02/15
Hope this helps...
EDIT AFTER COMMENT:
select w1.work as work
,if(w1.status = 'In Progress' or w2.status = 'In Progress',1,0) countInProgress
from work w1
left join work w2 on w1.work = w2.parent
where w1.parent is null
group by w1.work
Give this a whirl...
Also, if you want to see where all of the sub items are marked as In Progress
select w1.work as work
,if(w1.status = 'In Progress' or w2.status = 'In Progress',1,0) countInProgress
,@allInProgress := case when @allInProgress is null and w2.status = 'In Progress' then 1
when @allInProgress is null and (w2.status <> 'In Progress' or w2.status is null) then 0
when w2.status = 'In Progress' then @allInProgress * 1
when w2.status <> 'In Progress' then @allInProgress * 0
end allInProgress
from work w1
left join work w2 on w1.work = w2.parent
where w1.parent is null
group by w1.work