Abuamer Ответов: 1

Как я могу получить текущую сумму с начальным балансом ?


у меня есть такая таблица tbl_CustJournals

J_Id дата Num тип custId Дебет Кредит нетто
1 17/01/2018 5000 счет-фактура 2503 1472.78 0 1472.78
2 17/01/2018 1 оплата 2503 0 980 -980
3 07/02/2018 5 Счет-фактура 2503 318,8 0 318,8
4 17/01/2018 2 оплата 2503 0 492 -492
5 09/02/2018 5 счет 270 4490 0 4490
6 07/02/2018 3 оплата 270 0 900 -900
7 10/02/2018 55 счет 65 14000 0 14000
8 17/01/2018 23 счет-фактура 65 520 0 520
9 17/01/2018 24 счет-фактура 65 525 0 525
10 17/01/2018 24 счет 65 1400 0 1400
11 17/01/2018 25 Счет-фактура 65 1400 0 1400
12 17/01/2018 25 Счет-фактура 65 975 0 975
13 17/01/2018 26 счет 65 3310 0 3310
14 17/01/2018 252 счет-фактура 65 3708.1 0 3708.1
15 04/02/2018 27 счет-фактура 2503 14000 0 14000
16 04/02/2018 28 счет-фактура 2503 14000 0 14000
17 17/02/2018 29 счет 65 640 0 640
18 07/02/2018 4 Pay 2503 0 999 -999
19 07/02/2018 4 оплата 2503 0 900 -900
20 07/02/2018 4 оплата 2503 0 101 -101
21 07/02/2018 4 оплата 2503 0 900 -900
22 17/01/2018 78 счет 65 180.99 0 180.99
23 17/01/2018 78 счет-фактура 65 231 0 231


я хочу иметь бегущую сумму

Что я уже пробовал:

я попробовал эту процедуру
ALTER procedure [dbo].[SP_Customer_Get_Balnance_By_Declare_Table]
@custcode int,
@datefrom  date,
@dateto date
as
DECLARE @st TABLE
(
	[Date] DATE ,
	J_Number int,
	J_Type varchar(25),
	[Description] varchar(max),
	Debit money,
	Credit money,
	Gl_Debits money,
	Net_Balance money
);
 
DECLARE @NetBalance money = 0;
 
INSERT @st([Date],J_Number,J_Type,[Description],Debit,Credit, Gl_Debits, Net_Balance)
	SELECT Journal_Date,Journal_Num,Journal_Type,[Description],Debit,Credit, GL_Debits, RunningTotal = 0
	FROM dbo.Tbl_Cust_Journals
	where Tbl_Cust_Journals.custId =@custcode and Journal_Date between @datefrom and @dateto
	ORDER BY Journal_Date;
 
UPDATE @st
	SET @NetBalance = Net_Balance = @NetBalance + Gl_Debits
	FROM @st;
 
SELECT [Date] ,J_Number ,J_Type ,[Description] ,Debit ,Credit , Gl_Debits , Net_Balance 
	FROM @st
	ORDER BY [Date];
	return

но проблема в том, что когда custid равен 2503, а дата находится между "04/02/2018" и "07/02/2018", я хочу иметь противоположный баланс
может ли кто-нибудь помочь мне

1 Ответов

Рейтинг:
6

Richard Deeming

Предположим, что это последняя версия SQL Server: (2012 или более поздняя версия)

SELECT 
    Journal_Date,
    Journal_Num,
    Journal_Type,
    [Description],
    Debit,
    Credit, 
    GL_Debits, 
    SUM(GL_Debits) OVER (ORDER BY Journal_Date ROWS BETWEEN Unbounded Preceding And Current Row) As Net_Balance
FROM 
    dbo.Tbl_Cust_Journals
WHERE
    custId = @custcode 
And 
    Journal_Date Between @datefrom And @dateto
ORDER BY 
    Journal_Date
;

Предложение OVER (Transact-SQL) | Microsoft Docs[^]


Abuamer

спасибо тебе, брат. есть еще один вопрос . я хочу получить начальный баланс в первом ряду . который является балансом перед @datefrom. разве это возможно?

Richard Deeming

DECLARE @OB money;

SELECT @OB = SUM(GL_Debits)
FROM dbo.Tbl_Cust_Journals
WHERE custId = @custcode
And Journal_Date < @datefrom;

SELECT
    ...
    @OB + SUM(GL_Debits) OVER (ORDER BY Journal_Date ROWS BETWEEN Unbounded Preceding And Current Row) As Net_Balance
FROM
   ...