PDA

View Full Version : محاسبه مانده حساب



dottnett
پنج شنبه 21 اسفند 1393, 20:42 عصر
سلام دوستان
من یک جدول دارم که دو تا از فیلدهاش بدهکارو بستانکار هست حالا میخوام مانده ی هر ردیف رو بدست بیارم...مانده=جمع بدهکار - جمع بستانکار تا آن ردیف
مثلا

بدهکار بستانکار مانده
____________________________________
10000 0 10000
0 10000 0
مانده صفر در بالا حاصل جمع بدهکار - جمع بستانکار دو تا ردیف هست حالا میخوام بدونم تو اس کیوال چه دستوری بنویسم که این مانده بدست بیاد؟

مهدی نان شکری
پنج شنبه 21 اسفند 1393, 22:56 عصر
با سلام
اگر از SQL 2012 و به بالا استفاده می کنید می توانید از Window Function استفاده کنید که مثال آن شبیه زیر می باشد.
استفاده از Window Function ها در کارایی کوئری های شما تاثیر قابل توجهی خواهد داشت.


create table voucher
(
Id int identity primary key,
AccountId int not null,
Deptor decimal not null,
Credit decimal not null
)


select *,sum(Credit - Deptor) over(partition by AccountID order by Id Rows Between UNBOUNDED PRECEDING And Current Row)
from voucher


برای MS SQL 2005 و MS SQL 2008 می توانید از روش زیر استفاده کنید

select v2.Id,v1.AccountId,Sum(v1.Credit - v1.Deptor)
from voucher v1
join voucher v2 on v1.id<=v2.id and v1.AccountId = v2.AccountId
group by v1.AccountId,v2.id


موفق باشید

dottnett
پنج شنبه 21 اسفند 1393, 23:39 عصر
ممنون از پاسختون
ببنید من میخوام مانده در هر ردیف مثل تصویر پیوست شده محاسبه بشه..متاسفانه راه حلتونو که استفاده کردم جواب نداد

مهدی نان شکری
پنج شنبه 21 اسفند 1393, 23:54 عصر
برای این کار آیا مانده حساب را برای هر طرف حساب محاسبه می کتید یا برای همه؟
ورژن پایگاه داده شما چیست؟

dottnett
جمعه 22 اسفند 1393, 00:32 صبح
ورژن 2008
برای هر حساب محاسبه میکنه

dottnett
جمعه 22 اسفند 1393, 17:05 عصر
دوستان کسی نیست راهنمایی کنه؟

ham3d1988
شنبه 23 اسفند 1393, 12:05 عصر
سلام
اگه برای هر حساب جداگانه محاسبه می کنید این کوئری کاملا درست کار میکنه

dottnett
شنبه 23 اسفند 1393, 23:23 عصر
ببنید کوئری ای که من نوشتم و باید تغییر کنه به شکل زیر هستش
select Account.VotId, Account.Vot_No,Account.Vot_Rec,Account.Description ,Vnumber.Vot_Date,
Account.Credit,Account.Debit,(Account.Debit-Account.Credit) as Balance,Master.Co,Account.Account,
Master.Description as MasterDescription from Account inner join VNumber on Account.Vot_No=VNumber.Vot_No
inner join Master on Account.Account=Master.Account
where Account.Account=10600
group by Account.VotId,Account.Vot_No,Account.Vot_Rec,Accou nt.Description
,VNumber.Vot_Date,Account.Credit,Account.Debit,Man deh,Master.Co,Account.Account,
Master.Description order By Vnumber.Vot_Date

فایل پیوست هم حاصل کوئریه..این کوئری براساس Dateمرتب شده

dottnett
شنبه 08 فروردین 1394, 13:05 عصر
دوستان کسی هست راهنمایی کنه؟