کد زیر رو در تست کنید
select
C.* ,
(CASE WHEN Mande>0 THEN N'بدهکار'
WHEN Mande<0 THEN N'طلبکار'
ELSE N'تسویه'
END) as Vaziat
from
(
select
B.* ,
(B.RunningTotalBedehkari - B.RunningTotalBestankari) as Mande
From
(
SELECT
A.*,
RunningTotalBedehkari = (SELECT SUM(Bedehkar)
FROM dbo.tbl_Kalaei
WHERE tbl_Kalaei.Kod_Moshtari = A.Kod_Moshtari
AND tbl_Kalaei.Tarikh <= A.Tarikh),
RunningTotalBestankari = (SELECT SUM(Bostankar)
FROM dbo.tbl_Kalaei
WHERE tbl_Kalaei.Kod_Moshtari = A.Kod_Moshtari
AND tbl_Kalaei.Tarikh <= A.Tarikh)
FROM tbl_Kalaei AS A
WHERE A.Sharh not like N'کالای :%'
) AS B
) C
ORDER BY C.Kod_Moshtari , C.Tarikh
اینکه گفتم زمان رو هم ذخیره کنید برای اینکه در سلکت داخلی برحسب تاریخ و زمان میاد جمع رو برای رکوردهای قبل انجام میده. حالا اگر فقط تاریخ باشه، جمع ممکن هست اشتباه بشه. البته این به منطقی که پیاده کردید برمیگرده که آیا در یک روز برای یک شخص چند رکورد ذخیره میشه یا نه؟