powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получить остаток на документ в обратном порядке по дате документа?
3 сообщений из 3, страница 1 из 1
Получить остаток на документ в обратном порядке по дате документа?
    #39671930
Pvase
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. есть 2 таблицы. 1 - остатки, 2 - движения (приход, расход). В первой таблице хранятся остатки по Контрагентам и Договорам, во второй таблице хранятся фактические движения, т.е. все приходы и расходы по каждому документу (таблица документов). Вопрос такой, Делается запрос по таблице остатков, получаются остатки и теперь надо найти первейший документ, на котором возникает остаток больше 0. Вот запрос получения остатков:
Код: sql
1.
2.
3.
4.
5.
SELECT
Контрагент,
Договор,
СуммаДолга
FROM ТаблицаОстатков


А вот запрос по получению движений:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
Контрагент,
Договор,
Документ,
ДатаДокумента,
СуммаОборот
FROM ТаблицаДвижений


Теперь надо как-то эти 2 таблицы объединить, чтобы получить остаток из таблицы остатков и отнять от нее все Обороты с таблицы оборотов до даты документу, включая текущий документ. Помогите пожалуйста написать наиболее оптимальный запрос для получения таких остатков. Спасибо.
...
Рейтинг: 0 / 0
Получить остаток на документ в обратном порядке по дате документа?
    #39671947
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pvase,

Код: 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.
 Declare @ТаблицаОстатков table
 (
Контрагент int,
Договор int,
СуммаДолга money
 )
insert into @ТаблицаОстатков values (1,1,-1000),(1,2,-2000);

Declare @ТаблицаДвижений table 
(
Контрагент int,
Договор int,
Документ int,
ДатаДокумента date,
СуммаОборот money
)

insert into @ТаблицаДвижений values 
(1,1,1,'20180101',500),
(1,1,2,'20180201',500),
(1,1,2,'20180301',-50),
(1,1,3,'20180310',100),
(1,1,3,'20180401',200),
(1,2,4,'20180101',500),
(1,2,5,'20180201',500),
(1,2,6,'20180301',800),
(1,2,7,'20180401',300);

With НарастающийИтог as
(
Select *,sum(СуммаОборот) Over (Partition by Контрагент,Договор Order by ДатаДокумента, СуммаОборот Desc) as СуммаПредДвижений
From @ТаблицаДвижений
)
Select top 1 With Ties 
* From @ТаблицаОстатков a
left join НарастающийИтог b on a.Контрагент = b.Контрагент and a.Договор = b.Договор
Where a.СуммаДолга+isnull(b.СуммаПредДвижений,0)>0
Order by row_number() Over (Partition by a.Контрагент,a.Договор Order by b.ДатаДокумента, b.СуммаОборот)
...
Рейтинг: 0 / 0
Получить остаток на документ в обратном порядке по дате документа?
    #39672009
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pvase,

FAQ нарастающий итог.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получить остаток на документ в обратном порядке по дате документа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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