根据我的问题,我已经设法得到了答案..但随后出现了一个新问题,我需要像这样显示:
首先,这是学习计划表
所以现在,在第一次运行时,如果我想获取行,直到Credit of Credit列等于18,它将显示如下:
但是,然后在第二次运行时,如果我想获取行,直到Credit列的SUM等于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';
感谢您的回复和时间。
以下是链接How to limit rows to where SUM of a column equals to certain value in Oracle
答案 0 :(得分:1)
这有点奇怪的要求。但是,是的,如果你想要2个不同的结果集,你需要单独的2个SQL语句。但是对于每个附加声明,您只需要在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之间(包括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