Хрен с этой задачей, 57(3) мое решение (верное). nvv13, половину взял из твоего запроса для задачи 56))):
select qwe1.class, qwe1.Sunks
from
(SELECT class, sum(cl) as Sunks
from
(
select class,cl
from (
select class=isnull( (select class from Ships where Ships.name=Outcomes.ship) ,
(select class from Classes where Classes.class=Outcomes.ship) )
,cl=1
from Outcomes where result = 'sunk'
) as d1 where class is not null
union all
select class,cl=0 from Classes
) as uvi
GROUP BY class) as qwe1 inner join
(select class
from (
select Classes.class as class,ships.name as name
from Classes inner join ships on Classes.class=ships.class
union
select Classes.class as class, Outcomes.ship as name
from Classes inner join Outcomes on Classes.class=Outcomes.ship
) as zap
group by class
having count(name)>2) as qwe2
on qwe1.class=qwe2.class
where qwe1.sunks>0
Может кому то это интересно и он предложит свой вариант, с удовольствием бы его посмотрел.