Chcę dokonać podziału jednej kwoty i grupy w miesiącu, w którym co miesiąc ma taką samą kwotę, a reszta powinna być w ostatnim miesiącu.

Oto dane, które mam: suma: 27000, pierwszy miesiąc: M02, kwota na każdy miesiąc: 6000

A oto rezultat, którego chcę:

Month | Amount
M02 6000
M03 6000
M04 6000
M05 6000
M06 3000
0
hmzshl 5 wrzesień 2020, 13:55

1 odpowiedź

Najlepsza odpowiedź

Rekucencyjny SQL: Wartości początkowe można zmienić podstawy na obecnie nieznanych potrzeb, aby mieć różne wartości dla nich 😉:

DECLARE @initialAmount float = 27000;
DECLARE @amountPerMonth float = 6000;
DECLARE @nrOfMonths int = 5;

WITH abc(amount,permonth,rest) as (
   SELECT 
      @initialAmount as amount, 
      0 as permonth, 
      @initialAmount as rest
   UNION all
   SELECT 
     CASE WHEN rest>@amountPerMonth and (permonth+1) <> @nrOfMonths THEN @amountPerMonth ELSE rest END, 
     permonth+1, 
     CASE WHEN rest>@amountPerMonth and (permonth+1) <> @nrOfMonths THEN rest - @amountPerMonth ELSE 0 END 
   FROM abc 
   WHERE permonth < @nrOfMonths
   )

SELECT * FROM abc;

Wynik:

amount                 permonth    rest
---------------------- ----------- ----------------------
27000                  0           27000
6000                   1           21000
6000                   2           15000
6000                   3           9000
6000                   4           3000
3000                   5           0
0
Luuk 5 wrzesień 2020, 11:23