ورود

View Full Version : محاسبه موجودی در جدول حساب بانکی



yahyavb
دوشنبه 22 آبان 1391, 15:57 عصر
با سلام
فرض کنید جدولی به شکل زیر داریم:
( Balance ( Aid , Date , Value , Type
Aid شماره حساب
Date تاریخ
Value مبلغ
Type نوع تراکنش
در Type مقدارهای زیر دخیره میشه:
برای واریز 0 برای برداشت 1

حالا من برای محاسبه ی موجودی حساب به مشکل خوردم

باید تمام واریز ها جمع بشه و تمام برداشتها ازش کسر بشه
کسی میتونه کمک کنه؟


من خودم اینو نوشتم:
select (select SUM(Value) from BALANCE where [Type]=0)
- (select SUM(Value) from BALANCE where [Type]=1)
from BALANCE

ولی این موجودی بانکو میده من شماره حسابها رو جدا میخوام

maktoom
دوشنبه 22 آبان 1391, 17:34 عصر
سلام
یه راهش اینه که برداشت ها رو منفی بزنی، آخر کار همه رو باهم جمع بزنی.

GILAS_MVC
دوشنبه 22 آبان 1391, 18:05 عصر
select
bedehkar-bestankar mandeh
from
(
select
aid,
(selecr sum(Value ) from balance where type=0 group by Aid)bedehkar,
(selecr sum(Value ) from balance where type=1 group by Aid)besehkar
from balance
)
a

yahyavb
دوشنبه 22 آبان 1391, 21:23 عصر
select
bedehkar-bestankar mandeh
from
(
select
aid,
(selecr sum(Value ) from balance where type=0 group by Aid)bedehkar,
(selecr sum(Value ) from balance where type=1 group by Aid)besehkar
from balance
)
a



ممنون
این کد جواب میده در صورتی که فقط برای یک رکورد انجام بشه
اما وقتی چن تا شماره حساب کنار هم با موجودی هاشون میخام کار نمیکنه دوست عزیز
فقط مشکلش همینه که میگه sqlserver نمیتونه یک عبارت رو با تعدادی عبارت مقایسه کنه

yahyavb
دوشنبه 22 آبان 1391, 21:26 عصر
سلام
یه راهش اینه که برداشت ها رو منفی بزنی، آخر کار همه رو باهم جمع بزنی.

ممنون
درسته این راه خوبیه اما من نمیتونم جدول و شیوه ذخیره شو تغییر بدم
ملزمم به حساب کردن به همون شیوه هستم
دوستان لطفا راهنمایی کنین
چطوری یک مجموعه رکورد رو با هم نظیر به نظیر تفریق کنیم؟ مشکلمون فک کنم همینه!

mohsen24000
دوشنبه 22 آبان 1391, 22:01 عصر
خب شما باید روی فیلد Aid از Group By استفاده کنید...

yahyavb
دوشنبه 22 آبان 1391, 22:05 عصر
خب شما باید روی فیلد Aid از Group By استفاده کنید...

من به این شیوه که شما گفتی تغییرش دادم اما متاسفانه کار نکرد:
select
bedehkar-bestankar mandeh
from
(
select
aid,
(select sum(Value ) from balance where type=0 group by Aid)bedehkar,
(select sum(Value ) from balance where type=1 group by Aid)bestankar
from balance group by Aid
)
a

ببینید میشه راه حل دیگه ای هم چید؟

GILAS_MVC
دوشنبه 22 آبان 1391, 22:06 عصر
ساختار جداولت رو بذار

GILAS_MVC
دوشنبه 22 آبان 1391, 22:07 عصر
select
bedehkar-bestankar mandeh
from
(
select
aid,
(selecr sum(Value ) from balance where type=0 and aid=b.aid group by Aid)bedehkar,
(selecr sum(Value ) from balance where type=1 and aid=b.aid group by Aid)bestankar
from balance b
)
a

yahyavb
دوشنبه 22 آبان 1391, 22:09 عصر
ساختار جداولت رو بذار

Balance ( Aid , Data , Value , Type )
مانده ( شماره حساب ، تاریخ ، مبلغ ، نوع )
*
واریز = 0 ، برداشت = 1

yahyavb
دوشنبه 22 آبان 1391, 22:11 عصر
select
bedehkar-bestankar mandeh
from
(
select
aid,
(selecr sum(Value ) from balance where type=0 and aid=b.aid group by Aid)bedehkar,
(selecr sum(Value ) from balance where type=1 and aid=b.aid group by Aid)bestankar
from balance b
)
a


مرسی دوست عزیز حل شد
اینم با تغییرات نهایی(تکرارو حذف میکنه):



select distinct aid,
bedehkar-bestankar mandeh
from
(
select
aid,
(select sum(Value ) from balance where type=0 and aid=b.aid group by Aid)bedehkar,
(select sum(Value ) from balance where type=1 and aid=b.aid group by Aid)bestankar
from balance b
)
a

mohsen24000
دوشنبه 22 آبان 1391, 22:32 عصر
select aid,sum(value*(case type when 0 then 1 else -1 end)) from balance group by aid

baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 09:51 صبح
البته می شه در این خصوص بحث کرد ... که آیا مانده حساب باید محاسبه بشه ؟ یا هردفعه که تراکنشی انجام می شه اون مقدار مانده رو اصلاح کنه ؟!

yahyavb
سه شنبه 23 آبان 1391, 22:49 عصر
البته می شه در این خصوص بحث کرد ... که آیا مانده حساب باید محاسبه بشه ؟ یا هردفعه که تراکنشی انجام می شه اون مقدار مانده رو اصلاح کنه ؟!

مانده حساب رو همون لحظه احتیاج داریم
در هر تراکنش فقط همون تراکنش بدون محاسبه ی دیگه ای ذخیره میشه
دو تا جواب بالایی کامل اند.

yahyavb
سه شنبه 23 آبان 1391, 23:07 عصر
شماره حساب هایی که بیشترین موجودی رو دارند به همراه موجودی
و
شماره حساب هایی که موجودی اونها کمتر از 100 هستش
و
شماره حساب – تاریخ – نوع – عملیات – مبلغ – موجودی برای شماره حساب:100

اینارو هم نتونستم :ناراحت:

baktash.n81@gmail.com
چهارشنبه 24 آبان 1391, 07:30 صبح
دوست عزیز شما وقتی از می ری دم عابر بانک و مانده حساب می گیری ... سیستم از اول همه تراکنشهاتونو محاسبه می کنه ؟؟

ali.bahrami
چهارشنبه 24 آبان 1391, 13:10 عصر
دوست عزیز چرا نمیای دو تا فیلد برای مقدار بزاری .. یکی بدهکار یکی بستانکار بعد توی هر تراکنش یکی را مقدار میدی اون یکی را صفر میزاری.
یه جدول برای حساب که توی اون همیشه فیلد مانده را بعد از هر تراکنش update کنی و توی جدول balance هم میتونی یه فیلد بزاری برای مانده که بعد از هر تراکنش مانده حساب در اون قرار بگیره

yahyavb
چهارشنبه 24 آبان 1391, 20:57 عصر
دوست عزیز چرا نمیای دو تا فیلد برای مقدار بزاری .. یکی بدهکار یکی بستانکار بعد توی هر تراکنش یکی را مقدار میدی اون یکی را صفر میزاری.
یه جدول برای حساب که توی اون همیشه فیلد مانده را بعد از هر تراکنش update کنی و توی جدول balance هم میتونی یه فیلد بزاری برای مانده که بعد از هر تراکنش مانده حساب در اون قرار بگیره

درسته
اگه بشه فیلد ها رو اصلاح کرد که خیلی آسونه
ولی این پروژه دانشگاهه و استاد نمیزاره تغییرش بدم
به هر حال هر طور بود نوشتمش
ممنون