Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Расписывание отстатка по документам  [new]
cte_рекурсия
Guest
Всем привет.

Есть таблица начислений @lnach
Есть таблица оплат @lopl

Необходимо в разрезе каждого клиента, расписать каждую сумму начислений.

DECLARE @lopl TABLE (idclient INT, dd DATETIME, summa NUMERIC(16,2), priority INT)
DECLARE @lnach TABLE (idclient INT, dd DATETIME, summa NUMERIC(16,2), priority INT)

INSERT INTO @lnach
SELECT 1,'20160501',555,1
UNION
SELECT 1,'20160510',333,2

INSERT INTO @lopl
SELECT 1,'20160520',111,1
UNION
SELECT 1,'20160531',445,2



;WITH cte AS 
(
	SELECT 
		ln.idclient, 
		ln.dd AS datenach,
		priority = 0, 
		ln.summa,
		summabefore = CAST(ln.summa AS NUMERIC(16, 2)),
		ostatok = CAST(ln.summa AS NUMERIC(16, 2)),
		ln.dd AS dateopl,
		ostopl = CAST(0 AS NUMERIC(16, 2))
	FROM @lnach ln
	UNION ALL
	SELECT
		c.idclient, 
		c.datenach,
		lo.priority,
		c.summa,
		summabefore = CAST(c.ostatok as NUMERIC(16, 2)),
		ostatok = CAST( CASE WHEN c.ostatok > lo.summa
										THEN c.ostatok - lo.summa
										ELSE 0
						   end			
						  AS NUMERIC(16, 2)),
		lo.dd dateopl,
		ostopl = CAST( CASE WHEN c.ostatok > lo.summa
										THEN 0
										ELSE lo.summa - c.ostatok
						   end			
						  AS NUMERIC(16, 2))
		FROM cte c
	JOIN @lopl lo ON lo.idclient = c.idclient AND lo.priority = c.priority + 1 AND lo.dd >= c.dateopl
)
SELECT * 
FROM cte AS c
WHERE c.priority > 0
ORDER BY datenach


Не могу разобраться, как расписав один документ начислений на оплаты, при "расписывании" второго узнать сколько у него осталось денег.

На моем примере начисление '20160501' на 555 и '20160510' на 333.

Оплаты '20160520' на 111 и '20160531' на 445

по сути '20160501' на 555 это оплата '20160520' на 111 и '20160531' на 445 и остается 1.

При расписывании '20160510' на 333, я могу использовать лишь 1 от документа '20160531'.

А сейчас алгоритм расписывает заново оплаты, не зная что я их уже до этого списал
10 июн 16, 11:52    [19279751]     Ответить | Цитировать Сообщить модератору
 Re: Расписывание отстатка по документам  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
https://www.sql.ru/forum/1018035/zadachka-pro-yabloki-ili-sliyanie-2h-tablic
10 июн 16, 11:56    [19279782]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить