So, hier nun eine Script-Lösung, die absolut flexibel ist. Es ist im Prinzip egal, wieviele Felder in der Quelltabelle (hier #test) stehen. Die letzte Abfrage erstellt dann aus der ID-Liste (#result) das, was Du schliesslich benötigst.
Übrigens: Du musst das nicht als Stored Procedure anlegen. Einfach komplett in eine TAdsQuery verpacken und gut.
SQL-Code:
declare c cursor as select distinct(land) from #test;
try
drop table #result;
catch all
end try;
create table #result(id integer);
open c;
while fetch c do
insert into #result select top 5 id from #test where land=c.land order by umsatz desc;
end while;
close c;
select a.* from #test a
inner join #result b on a.id=b.id
order by land, umsatz desc