PDA

View Full Version : محاسبه موجودی با دستورات Sql



s.sohrabzade
پنج شنبه 24 مرداد 1387, 18:13 عصر
با سلام خدمت همه دوستان
میخواستم با دستورات sql موجودی حسابها رو بدست بیارم. مثلاً شخصی دارای یک حساب جاری هستش که این حساب دارای 10 تراکنش بوده که مثلاً 5 تا از تزاکنشها تو یه روز و 5 تای دیگه تو یه روز دیگه هستن. حالا میخوایم موجودی این حساب رو در هر رکورد داشته باشیم.مثل عکسی که پیوست کردم موجودی روز قبلی در محاسبات رکورد جاری باید اعمال بشه

ممنون

SYNDROME
پنج شنبه 24 مرداد 1387, 19:21 عصر
با سلام خدمت همه دوستان
میخواستم با دستورات sql موجودی حسابها رو بدست بیارم. مثلاً شخصی دارای یک حساب جاری هستش که این حساب دارای 10 تراکنش بوده که مثلاً 5 تا از تزاکنشها تو یه روز و 5 تای دیگه تو یه روز دیگه هستن. حالا میخوایم موجودی این حساب رو در هر رکورد داشته باشیم.مثل عکسی که پیوست کردم موجودی روز قبلی در محاسبات رکورد جاری باید اعمال بشه
ممنون
بستگی به طراحی جدول شما دارد.
اگر در یک جدول باشد که فقط باید با استفاده از Order By رکوردها را مرتب کنید و برای مانده در خط هم می توانید اطلاعات را در یک جدول بریزید و سپس محاسبه کنید.
البته یکی از دوستان روشی را برای محاسبه مانده در خط استفاده کرده است.
جستجو کنید.
موفق باشید

رضا جاسبی
جمعه 25 مرداد 1387, 01:20 صبح
کار پیچیده ایست. پیشنهاد می کنم که در SQL این کار رو نکنی و در برنامه راحت محاسبه ات رو انجام بدی. اما اگر اصرار داری که در SQL باشه یا باید توسط cursor این کار رو بکنی (چون محاسبات در همون لحظه انجام میشه و فکر نمی کنم Query بتونه مقدار یک سطر رو محاسبه کنه و بعد در سطر بعدی اعمال کنه) و یا اینکه راه بهتر اینه که مانده رو در هر سطر ثبت کنی. اینطوری کار ثبت و بخصوص اصلاح سخت میشه و کد بیشتری باید بنویسی اما حسنش اینه که برای گزارش راحتی و نیازی نیست که Query پیچیده داشته باشی.

SYNDROME
جمعه 25 مرداد 1387, 08:16 صبح
این هم یک مثل ساده در رابطه با مانده در خط:


Select Price,(Select Sum(Price) From Tbl_Test Where No<=T1.No) Sum
From Tbl_Test T1
Order By No

موفق باشید

Amir_Safideh
جمعه 25 مرداد 1387, 10:55 صبح
SELECT [شماره حساب],[تاریخ],[ساعت],[بدهکار],[بستانکار],
ISNULL((SELECT SUM([بدهکار])FROM Table1 TIn WHERE (TIn.[تاریخ] < TOut.[تاریخ])
OR(TIn.[تاریخ]= TOut.[تاریخ] AND TIn.[ساعت] <= TOut.[ساعت])),0)-
ISNULL((SELECT SUM([بستانکار])FROM Table1 TIn WHERE (TIn.[تاریخ] < TOut.[تاریخ])
OR(TIn.[تاریخ] = TOut.[تاریخ] AND TIn.[ساعت] <= TOut.[ساعت])),0)As MAANDE_HESAAB
FROM Table1 TOut
WHERE [شماره حساب] = 1000
ORDER BY [تاریخ],[ساعت]

-----------
موفق باشید.

s.sohrabzade
جمعه 25 مرداد 1387, 13:30 عصر
دکمه تشکر رو واسه قدردانی از اینکه به مشکلم جواب دادید رو کافی ندونستم و باز هم از همه دوستان عزیزمخصوصاً اقا Amir_Safideh و SYNDROME کمال تشکر رو دارم.موفق باشید