Questo è un buon caso d'uso per l'utilizzo di una somma cumulativa.
Supponendo che l'ordine delle righe sia definito in modo inequivocabile dalle colonne sem
e subjectcode
, come implica la tua query, puoi scrivere la query in questo modo:
select *
from (select t.*,
sum(t.credit) over (order by t.sem, t.subjectcode) as credit_sum
from studyplan t
where t.matricsno = 'D031310087')
where credit_sum <= 20 -- adjust to desired number of credits
order by sem, subjectcode