带条件的Oracle SUM

问题描述 投票:0回答:1

我有一个要求,在一些进口,我有一个合同,在不同的时间段以不同的成本与多个批次。例如,你要求一个总金额为10万的租赁,分24个月支付,前10个月支付3250欧元,剩余14个月支付5625欧元。

我必须计算每年的支付成本。这意味着,第一年,我已经支付3250 * 10 + 5625 * 2(剩余的2个月,以关闭一年)。我如何在SQL中做到这一点?

CREATE TABLE T1 ( CODCTR VARCHAR2(20 CHAR), 
                  FROMMONTH NUMBER(5), 
                  TOMONTH NUMBER(5),
                  IMPORTO NUMBER(18,4) ); 
INSERT INTO T1 VALUES ('01',1,10,3250); 
INSERT INTO T1 VALUES ('01',11,24,5625);

我想得到的是这样的结果。年付款=43750 ---> 10个月*3250 + 2个月5625。

sql oracle
1个回答
0
投票

如果你有一个表与月的列表。

CREATE TABLE M1 (CURMONTH NUMBER(5));
INSERT INTO M1 VALUES (1);
INSERT INTO M1 VALUES (2);
...
INSERT INTO M1 VALUES (12);

那么你可以把它连接到你的表。

SELECT *
  FROM M1
  JOIN T1 ON M1.curmonth BETWEEN t1.frommonth AND t1.tomonth;

这个连接有付款到期的月份。一旦你有,你可以很容易 SUM 的付款。

SELECT SUM(importo)
  FROM M1
  JOIN T1 ON M1.curmonth BETWEEN t1.frommonth AND t1.tomonth;

你甚至可以在飞行中创建有趣的月份的表格。

WITH m1 AS (SELECT LEVEL as curmonths FROM dual CONNECT BY LEVEL <= 12)
SELECT SUM(importo) 
  FROM t1 JOIN m1 ON m1.curmonths BETWEEN t1.frommonth AND t1.tomonth;
© www.soinside.com 2019 - 2024. All rights reserved.