Sugiro calcular uma porcentagem em execução usando uma função de janela e comparar o resultado com 80.
Neste pequeno exemplo de código, mostrei como fazer isso com base no resultado de sua consulta colocada em um bloco CTE chamado
your_data
. Apenas mostra a ideia. with
your_data (category, percentage) as(
-- sample data based on your example
select 1, 32 from dual union
select 2, 20 from dual union
select 3, 20 from dual union
select 4, 10 from dual union
select 5, 18 from dual
),
t as (
select your_data.*,
-- running sum calculation
sum(percentage) over (order by category) pctg_running
from your_data
)
select *
from t
where pctg_running <= 80
Na verdade, ele retorna 3 linhas e você diz que espera que 4 linhas sejam mostradas. Para adicionar a linha em que a porcentagem em execução excede primeiro seu limite (80), você pode extrair a porcentagem da categoria atual do valor em execução, ou seja, substituir
sum(percentage) over (order by category)
com sum(percentage) over (order by category) - percentage
. HTH