Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посчитать сальдо в разрезе документа / 7 сообщений из 7, страница 1 из 1
31.08.2020, 17:39
    #39994180
Earl11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сальдо в разрезе документа
Здравствуйте. Имеются две таблицы: долг (покупатель, номер документа, дата, сумма долга) и платежи (покупатель, номер платёжки, дата, сумма платежа). Нужно вывести сальдо по каждому документу т.е. максимально покрыть долг платежами.
Например, есть долг док1 = 1500, док2 = 2000, производятся платежи плж1 = 500, плж2 = 700, плж3 = 1000. Сальдо по документам должно быть док1 = 0, док2 = 1300. По факту, долги гасятся по фифо. Какими способами можно реализовать?
...
Рейтинг: 0 / 0
31.08.2020, 18:19
    #39994202
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сальдо в разрезе документа
Earl11,

гуглите "нарастающий итог".

но с фифо может быть несколько гемморойней если у вас бизнес модель предусматривает увеличение долга. помню немного попарился с расчетом валютной позиции по учету цб.
...
Рейтинг: 0 / 0
01.09.2020, 10:39
    #39994346
Earl11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сальдо в разрезе документа
felix_ff,
А с двумя таблицами такое возможно будет сделать?
...
Рейтинг: 0 / 0
01.09.2020, 10:43
    #39994348
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сальдо в разрезе документа
Earl11,

А с двумя таблицами такое возможно будет сделать?


такое - это какое? ваш вопрос выпадает из контекста первого вопроса.

нарастающий итог вы будете считать по данным из таблицы платежей, но связанной с таблицей долг конечно (по покупателям) - это две таблицы
...
Рейтинг: 0 / 0
01.09.2020, 22:30
    #39994648
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сальдо в разрезе документа
для побаловаться с целью поизучать аналитику
Код: 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.
with credits as(
select 1 user_id, 1 doc_id, {d '2020-01-01'} doc_date, 100 amount union all
select 1 user_id, 2 doc_id, {d '2020-01-03'} doc_date, 200 amount union all
select 1 user_id, 3 doc_id, {d '2020-01-05'} doc_date, 300 amount union all
select 2 user_id, 4 doc_id, {d '2020-01-11'} doc_date, 400 amount union all
select 2 user_id, 5 doc_id, {d '2020-01-21'} doc_date, 500 amount
),
payments as (
select 1 user_id, 250 payment, {d '2020-01-21'} payment_date union all
select 1 user_id,  50 payment, {d '2020-01-21'} payment_date union all
select 1 user_id, 250 payment, {d '2020-01-21'} payment_date union all
select 2 user_id,   5 payment, {d '2020-01-21'} payment_date
)
select cr.*,
       sum(amount) over(partition by cr.user_id  order by cr.doc_date) amount_inc,
	   case
	        when sum(amount) over(partition by cr.user_id  order by cr.doc_date) <= p.payment then 0
	        when -amount+sum(amount) over(partition by cr.user_id  order by cr.doc_date) < p.payment then sum(amount) over(partition by cr.user_id  order by cr.doc_date)-p.payment
	        else amount
	   end
  from credits cr
  join
  (
  select user_id, sum(payment) payment
    from payments
   group by user_id
  ) p
  on p.user_id = cr.user_id

user_iddoc_iddoc_dateamountamount_inc(Отсутствует имя столбца)112020-01-01 00:00:00.0001001000122020-01-03 00:00:00.0002003000132020-01-05 00:00:00.00030060050242020-01-11 00:00:00.000400400395252020-01-21 00:00:00.000500900500
...
Рейтинг: 0 / 0
03.09.2020, 22:19
    #39995396
Earl11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сальдо в разрезе документа
andreymx,
а в разрезе дат платежей это можно сделать?
...
Рейтинг: 0 / 0
04.09.2020, 00:20
    #39995427
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать сальдо в разрезе документа
Earl11,

прочитайте справку про предложение over() отпадет достаточно много вопросов.

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-ver15

https://info-comp.ru/obucheniest/649-over-in-t-sql.html

вот на мой взгляд достаточно втятное объяснение с цветными картинками:
https://www.fastreport.ru/ru/blog/251/show/
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посчитать сальдо в разрезе документа / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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