Oracle СУММА с условиями - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть запрос по некоторым импортам, где у меня есть контракт с несколькими траншами с разными затратами в разные периоды времени. Например, вы запрашиваете лизинг на общую сумму 100 тыс. Рублей, разделенную на 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

1 Ответ

0 голосов
/ 08 апреля 2020

Если у вас есть таблица со списками месяцев:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...