![](/img/trans.png)
[英]How to limit rows to where SUM of a column equals to certain value in 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';
感谢您的答复和时间。
这有点奇怪。 但是,是的,如果您需要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.