Вы также можете использовать count , group by и , имеющие . Это избавляет от необходимости делать какие-либо объединения таблиц, что более эффективно.
create table #Orders (
order_no int,
suboperation varchar(30),
finished smalldatetime)
insert into #Orders values (1 , 'preparing' , '01/01/2009')
insert into #Orders values (1 , 'scrubbing' , '01/05/2009')
insert into #Orders values (1 , 'painting' , '01/10/2009')
insert into #Orders values (2 , 'preparing' , '02/05/09')
insert into #Orders values (2 , 'painting' , NULL)
insert into #Orders values (3 , 'preparing' , '03/01/2009')
insert into #Orders values (3 , 'scrubbing' , '03/15/2009')
insert into #Orders values (3 , 'painting' , '03/10/2009')
insert into #Orders values (4 , 'bending' , NULL)
insert into #Orders values (4 , 'crashing' , NULL)
insert into #Orders values (4 , 'staining' , NULL)
insert into #Orders values (4 , 'painting' , NULL)
select
order_no,
count(1) As NoOfSubtasks --count(1) gives the number of rows in the group
count(finished) As NoFinished, --count will not count nulls
from #Stuff
group by
order_no
having
count(finished) = count(1) --if finished = number of tasks then it's complete
drop table #Orders