繁体   English   中英

如何将行限制为某一列的SUM等于某个值的位置,然后转到下一行Oracle

[英]How to limit rows to where SUM of a column equals to certain value and go to next row Oracle

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

首先,这是学习计划表

在此处输入图片说明

因此,现在,在第一次运行时,如果要在“贷方”列的SUM等于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';

感谢您的答复和时间。

这是链接, 如何将行限制为列的SUM等于Oracle中的特定值

这有点奇怪。 但是,是的,如果您需要2个不同的结果集,则需要单独的2条SQL语句。 但是对于每个其他语句,您只需要调整credit_sum的条件credit_sum

例如,如果对于您的第一个查询,您想要在信用额达到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

对于第二个查询,您说您想要信用额达到21的行,但是忽略了第一个查询返回的行。 表达该要求的另一种方法是返回累积信用额在19到39(含)之间的行。 因此,这仅是修改credit_sum上的过滤器以使用between条件的问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM