C'est un bon cas d'utilisation pour utiliser une somme cumulée.
En supposant que l'ordre des lignes est défini sans ambiguïté par les colonnes sem
et subjectcode
, comme votre requête l'implique, vous pouvez écrire la requête comme ceci :
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