Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получить остаток на документ в обратном порядке по дате документа? / 3 сообщений из 3, страница 1 из 1
10.07.2018, 10:33
    #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
10.07.2018, 11:05
    #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
10.07.2018, 12:28
    #39672009
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить остаток на документ в обратном порядке по дате документа?
Pvase,

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


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