Sql 如何将行限制为列的和等于某个值并转到下一行

Sql 如何将行限制为列的和等于某个值并转到下一行,sql,oracle,Sql,Oracle,根据我这里的问题,我已经设法得到了答案。。但随后出现了一个新问题,我需要这样显示它: 首先,这是studyplan表 现在,在第一次运行时,如果我想得到行数,直到Credit列的和等于18,它将显示如下: 但是,在第二次运行时,如果我想得到行,直到信贷总额列等于21,我希望它显示如下: 我希望它如何在下一行对列求和?我必须做2个SQL语句吗 以下是第一次运行的成功代码: SELECT * FROM (SELECT t.*, SUM(t.credit) OVER (PARTITION BY t.m

根据我这里的问题,我已经设法得到了答案。。但随后出现了一个新问题,我需要这样显示它:

首先,这是studyplan表

现在,在第一次运行时,如果我想得到行数,直到Credit列的和等于18,它将显示如下:

但是,在第二次运行时,如果我想得到行,直到信贷总额列等于21,我希望它显示如下:

我希望它如何在下一行对列求和?我必须做2个SQL语句吗

以下是第一次运行的成功代码:

SELECT * FROM
(SELECT t.*,
SUM(t.credit) OVER (PARTITION BY t.matricsno ORDER BY t.sem, t.subjectcode)
AS credit_sum
FROM studyplan t)
WHERE credit_sum <= 17 AND matricsno = 'D031310087';
感谢您的回复和时间


这是链接,

这是一个有点奇怪的要求。但是,如果需要两个不同的结果集,则需要两个单独的SQL语句。但对于每一个额外的声明,你只需要调整信用额度的条件

例如,如果对于第一个查询,您希望在信贷总额达到18时获取行,您可以执行以下操作:

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 <= 18
 order by sem, subjectcode

不,你没有。检查Oracle的滞后和超前功能。如果您需要存储此信息以便能够从单独的SQL查询中访问它,那么您需要存储有关上次提取id的信息,然后在WHERE子句中使用它来查找并在选择后再次更新上次提取id。哇,非常感谢。我不知道这样能排到下一排。但它应该在19到40之间,对吗?因为下一行应该是21个信用总额。测试它以确保,但19到39包括21个数字由我的计数。在任何情况下,你都可以使用一般原则,并根据你的具体需要进行调整。啊,是的,你是对的。我忘了19也算在内。对不起,先生,哈哈
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 between 19 and 39
 order by sem, subjectcode