powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расписывание отстатка по документам
2 сообщений из 2, страница 1 из 1
Расписывание отстатка по документам
    #39254134
Всем привет.

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
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'.

А сейчас алгоритм расписывает заново оплаты, не зная что я их уже до этого списал
...
Рейтинг: 0 / 0
Расписывание отстатка по документам
    #39254142
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расписывание отстатка по документам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]