Если вы используете Firebird 3, вы можете использовать оконные функции :
select count(*) over(), column1, column2, etc
from sometable
where somecondition
order by something
fetch first 10 rows only
При этом используется условие fetch
, представленное в Firebird 3.
В более ранних версиях сделать это немного сложнее, но, например, в Firebird 2.1 и выше, вы можете использовать общее табличное выражение, чтобы избежать необходимости повторять запрос и условия:
with actualquery as (
select column1, column2, etc
from sometable
where somecondition
)
select (select count(*) from actualquery), column1, column2, etc
from actualquery
order by something
rows 10
При этом используется rows
предложение (что аналогично select first 10
)