وقتی سوال میپرسید در همان پست اول جتما کد و در صورت لزوم اسکریپت جدول رو بزارید تا بشه تست کرد.
اگر جدول زیر رو داشته باشیم
CREATE TABLE [dbo].[TestTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NOT NULL,
[Bestankari] [decimal](18, 0) NOT NULL,
[Bedehkari] [decimal](18, 0) NOT NULL,
[Tarikh] [datetime2](7) NOT NULL
)
کوئری زیر پاسخ شماست. توجه کنید که زمان ثبت برای هر رکورد بایست وجود داشته باشه که میتونه از نوع datetime2 باشه تا بتوان بر حسب اون مجموع بدست بیاد
select
C.* ,
(CASE WHEN Mande>0 THEN N'بدهکار'
WHEN Mande<0 THEN N'طلبکار'
ELSE N'تسویه'
END) as Vaziat
from
(
select
B.Id ,
B.PersonId ,
B.Bedehkari ,
B.Bestankari ,
B.Tarikh ,
(B.RunningTotalBedehkari - B.RunningTotalBestankari) as Mande
From
(
SELECT
A.*,
RunningTotalBedehkari = (SELECT SUM(Bedehkari)
FROM dbo.TestTable
WHERE TestTable.PersonId = A.PersonId
AND TestTable.Tarikh <= A.Tarikh),
RunningTotalBestankari = (SELECT SUM(Bestankari)
FROM dbo.TestTable
WHERE TestTable.PersonId = A.PersonId
AND TestTable.Tarikh <= A.Tarikh)
FROM TestTable AS A
) AS B
) C
ORDER BY C.PersonId , C.Tarikh