PDA

View Full Version : محاسبه مانده بدهکار و بستانکار



mortezahbh
پنج شنبه 29 آبان 1393, 10:46 صبح
با سلام

یک کد SQl میخوام که جمع بدهکاری و بستانکاری مشتری رو حساب کنه و از هم کم کنه تا مقدار مانده بدهکار یا بستانکار مشخص شه

و به این صورت نمایش بده



Id

Name

Bedehi

Bestankari

Mande

Vaziyat



1

Ali

3.500.000

3.000.000

500.000

Bedehkar



2

Ahamad

4.000.000

5.000.000

1.000.000

Bestankar







با تشکر

mortezahbh
جمعه 30 آبان 1393, 18:31 عصر
دوستان کسی نظری نداره؟؟

یا اگه متوجه نشدید بگید تا بیشتر توضیح بدم

یک راهنمایی کوچیکم بکنید ممنون میشم:قلب:

mahllaa
جمعه 30 آبان 1393, 19:21 عصر
خب تا جایی که من میدونم برای جمع باید از تابع sum استفاده کنید


sum(bedehkari)

sum(bestankari)

برای اینکه بتونید اینارو جمع کنید فکر کنم باید از دستور group by id استفاده کنید

و برای نمایش هم که از select میتونید استفاده کنید

mortezahbh
جمعه 30 آبان 1393, 19:33 عصر
حرف شما درسته
حالا برای اینکه تفاوت مبالغ بدست بیاد و وضعیت بدهکاری و بستانکاری مشخص شه چه راهی دارم؟

mahllaa
جمعه 30 آبان 1393, 22:02 عصر
حرف شما درسته
حالا برای اینکه تفاوت مبالغ بدست بیاد و وضعیت بدهکاری و بستانکاری مشخص شه چه راهی دارم؟

خب راستش من خودم هم تازه کار هستم و مبتدی

اما فکر کنم اگر بشه تفریق مبالغ رو بدست اورد و بعد با شرط اینکه مثلا اگر عدد از صفر بشتر باشه بدهکار و یا کمتر باشه بستانکار نوشته بشه

من همینا به ذهنم رسید امیدوارم به دردتون بخوره

ham3d1988
شنبه 01 آذر 1393, 13:01 عصر
سلام
جداول اصلی چه فیلدایی دارن

pezhvakco
شنبه 01 آذر 1393, 16:36 عصر
شاید این باشه

SELECT ID, Name, Bed, Bes
,(Case When Bed > Bes
Then (Bed - Bes)
Else (Bes - Bed)
End) AS Mande
,(Case When Bed > Bes
Then 'Bedehkar'
Else (Case When Bed < Bes
Then 'Bestankar'
Else '--'
End)
End) AS Vaziyat
FROM dbo.Table01

mortezahbh
شنبه 01 آذر 1393, 17:03 عصر
شاید این باشه

SELECT ID, Name, Bed, Bes
,(Case When Bed > Bes
Then (Bed - Bes)
Else (Bes - Bed)
End) AS Mande
,(Case When Bed > Bes
Then 'Bedehkar'
Else (Case When Bed < Bes
Then 'Bestankar'
Else '--'
End)
End) AS Vaziyat
FROM dbo.Table01



ممنون از تمامی دوستان

ببینید من با این دستور اطلاعات بدهکاری و بستانکاری هر دانشجو رو حساب می کنم



SELECT t1.ID, t1.fname, t1.lname, t1.stunum, t1.mobile, Bedehi, Pardakhti

FROM (SELECT students.ID, students.fname, students.lname, students.stunum, students.mobile, SUM(Debts.price) as Bedehi
FROM students LEFT JOIN Debts on students.ID = Debts.student_id
GROUP BY students.ID, students.fname, students.lname, students.stunum, students.mobile) as t1
LEFT JOIN
(SELECT students.ID, students.fname, students.lname, students.stunum, students.mobile, SUM(Receipts.price) as Pardakhti
FROM students LEFT JOIN Receipts on students.ID = Receipts.student_id
GROUP BY students.ID, students.fname, students.lname, students.stunum, students.mobile) as t2
on t1.ID = t2.ID




حالا این کد شما رو باید به چه صورت استفاده کنم؟؟؟؟


ممنون :قلب:

mortezahbh
شنبه 01 آذر 1393, 17:09 عصر
سلام
جداول اصلی چه فیلدایی دارن

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



Students



ID

fname

lname

National_Num

B_Date

Old

type

address

stunum

grade

years

FieldofStudy

Semester



1

رضا

رضوی

4563453222

1370/01/01


ترمی

__________

541541552415

کارشناسی

1393

کارشناسی کامپیوتر

اول



2

علی

علوی

1234567890

1370/01/01


پودمانی

__________

123987

کارشناسی

1391

کارشناسی ارشد حسابداری

دوم





Receipts
ID
student_id
debt_id
num
type
date_Received
price
for


5
1
3
543645
فیش
1393/08/30
$3,500,000
شهریه ثابت


9
1
6
543211
چک
1393/08/30
$500,000
15% حق نظارت




Debts
ID
student_id
Tuition
title
debt_date
price
status


1
0
0
سرانه فرهنگی
1393/07/01
$350,000
0


2
0
0
بیمه
1393/07/01
$25,000
0


3
1
1
شهریه ثابت
1393/07/01
$3,500,000
پرداخت شد


4
1
0
سرانه فرهنگی
1393/07/01
$350,000
پرداخت شد


5
1
0
بیمه
1393/07/01
$25,000
پرداخت شد


6
1
0
15% حق نظارت
1393/07/01
$525,000
پرداخت نشده


14
2
1
شهریه ثابت


$5,500,000
پرداخت نشده


15
2
0
سرانه فرهنگی


$350,000
پرداخت نشده


16
2
0
بیمه


$25,000
پرداخت نشده


17
2
0
15% حق نظارت


$825,000
پرداخت نشده

mortezahbh
دوشنبه 03 آذر 1393, 18:25 عصر
دوستان ؟
من هنوز مشکلم حل نشده لطفا راهنمایی کنید :ناراحت:

با تشکر

ham3d1988
سه شنبه 04 آذر 1393, 07:31 صبح
سلام


select
a.Id
,a.Name
,a.Bedehi
,a.Pardakhti
,(a.Bedehi-a.Pardakhti) Mande
,case when (a.Bedehi>a.Pardakhti) then 'بدهکار' else 'بستانکار' end StdStatus


from




(SELECT t1.ID, t1.fname, t1.lname, t1.stunum, t1.mobile, Bedehi, Pardakhti

FROM (SELECT students.ID, students.fname, students.lname, students.stunum, students.mobile, SUM(Debts.price) as Bedehi
FROM students LEFT JOIN Debts on students.ID = Debts.student_id
GROUP BY students.ID, students.fname, students.lname, students.stunum, students.mobile) as t1
LEFT JOIN
(SELECT students.ID, students.fname, students.lname, students.stunum, students.mobile, SUM(Receipts.price) as Pardakhti
FROM students LEFT JOIN Receipts on students.ID = Receipts.student_id
GROUP BY students.ID, students.fname, students.lname, students.stunum, students.mobile) as t2
on t1.ID = t2.ID
)a

mortezahbh
سه شنبه 04 آذر 1393, 18:43 عصر
سلام


select
a.Id
,a.Name
,a.Bedehi
,a.Pardakhti
,(a.Bedehi-a.Pardakhti) Mande
,case when (a.Bedehi>a.Pardakhti) then 'بدهکار' else 'بستانکار' end StdStatus


from




(SELECT t1.ID, t1.fname, t1.lname, t1.stunum, t1.mobile, Bedehi, Pardakhti

FROM (SELECT students.ID, students.fname, students.lname, students.stunum, students.mobile, SUM(Debts.price) as Bedehi
FROM students LEFT JOIN Debts on students.ID = Debts.student_id
GROUP BY students.ID, students.fname, students.lname, students.stunum, students.mobile) as t1
LEFT JOIN
(SELECT students.ID, students.fname, students.lname, students.stunum, students.mobile, SUM(Receipts.price) as Pardakhti
FROM students LEFT JOIN Receipts on students.ID = Receipts.student_id
GROUP BY students.ID, students.fname, students.lname, students.stunum, students.mobile) as t2
on t1.ID = t2.ID
)a

ممنون دوست من ولی این هم جواب نداد

این اخطار رو میده Unspecified error :ناراحت:

حمیدرضاصادقیان
سه شنبه 04 آذر 1393, 21:50 عصر
سلام
دوست عزیز در مورد همین مورد لطفا جستجو کنید بارها و بارها در تالار بحث شده.
به علاوه به این مورد Running total می گویند که میتوانید همین عبارت را در سایت یا درگوگل جستجو کنید و به روشهای مختلف پیاده سازیش رو ببینید.

mortezahbh
چهارشنبه 05 آذر 1393, 12:19 عصر
با تشکر از راهنمایی شما

این موارد رو هم جستجو کردم اما باز هم به نتیجه مورد نظر خودم نرسیدم

دوستان لطفا باز هم راهنمایی کنید، احتمالا با یک تغییر کوچک به نتیجه میرسم

ممنون :قلب:

mortezahbh
پنج شنبه 06 آذر 1393, 19:15 عصر
دوستان ؟

مشکلم برطرف شد با این کد

'SELECT t1.ID, t1.fname, t1.lname, t1.stunum, t1.mobile, Bedehi, Pardakhti ,(Bedehi-Pardakhti)as mande'

فقط یک سوال دیگه دارم
وقتی یک دانشجو پرداختی نداشته باشد خروجی SUM اون هیچ مقداری نمیگیرد و در نتیجه در قسمت مانده نیز هیچ خروجی ندارم

من میخوام وقتی هیچ مقداری نداشت عدد صفر رو قرار بده

برای این کار باید چیکار کنم؟؟؟

با تشکر

aslan
پنج شنبه 06 آذر 1393, 22:21 عصر
ISNULL(SUM(Debts.price),0)
IsNull(bedehi,0)

http://msdn.microsoft.com/en-us/library/ms184325.aspx

mortezahbh
جمعه 07 آذر 1393, 09:53 صبح
باتشکر فراوان

دوست عزیز کد شما رو وارد کردم بعد از اجرا این اخطار رو داد



Wrong number of arguments used with function in query expression 'ISNULL(SUM(Debts.price),0)'

توی لینکی هم که فرستادید جستجو کردم ولی نتیجه ای نگرفتم

دیتا بیس من اکسس هست مشکلی با این نداره؟؟

البته خودم یکم جستجو کردم دیدم این کد هم برای sql و هم برای access جواب میده

با تشکر :قلب:

mortezahbh
یک شنبه 09 آذر 1393, 21:35 عصر
دوستان کسی ایده ای نداره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

aslan
یک شنبه 09 آذر 1393, 21:56 عصر
در access از ترکیب IIF و ISNULL استفاده کنید . لینک زیر را ببینید :
http://forums.asp.net/t/1035861.aspx?SQL+ISNULL+function+in+MS+Access

jeson_park
یک شنبه 09 آذر 1393, 21:59 عصر
باتشکر فراوان

دوست عزیز کد شما رو وارد کردم بعد از اجرا این اخطار رو داد



Wrong number of arguments used with function in query expression 'ISNULL(SUM(Debts.price),0)'

توی لینکی هم که فرستادید جستجو کردم ولی نتیجه ای نگرفتم

دیتا بیس من اکسس هست مشکلی با این نداره؟؟

البته خودم یکم جستجو کردم دیدم این کد هم برای sql و هم برای access جواب میده

با تشکر :قلب:

database engine شما چی هست؟؟ برای بانک اطلاعاتی اکسس از Jet Database Engine استفاده کنید اختمالاً مشکلتون حل شه

mehdi.fni
سه شنبه 18 آذر 1393, 10:45 صبح
فکر کنم اگر روی (Bedehi-Pardakhti) از دستور case استفاده کنی نتیجه را بگیری