عرض مجموع قيم سجلات باستخدام أوامر SQL
#1
مثال لتوضيح الإشكال
عندي 03 جداول (1-جدول الزبون-2-جدول الديون-3-جدول المدفوعات)
الجدول الأول اسمه Client : فيه 03 حقول: Code_Client-Nom_Client
الجدول الثاني اسمه Credit: فيه 03 حقول: Code_Client-Montant_Credit-Date_Credit
الجدول الثالث اسمه Versement: فيه 03 حقول: Code_Client-Montant_Versement-Date_Versement
* إذا أردنا معرفة مجموع ديون كل زبون:
كود :
select Client.Code_Client , SUM(MonTant_Credit) From Client , Credit where Client.Code_Client=Credit.Code_Client Group By Code_Client
* إذا أردنا معرفة مجموع مدفوعات كل زبون:
كود :
select Client.Code_Client , SUM(MonTant_Versement) From Client , Versement where Client.Code_Client=Versement.Code_Client Group By Code_Client


*الإشكال ؟ : معرفة الإثنين: هذا الكود صحيحا برمجيا لكن يعطي نتائج خاطئة:
كود :
select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement) From Client , Credit , Versement where (Client.Code_Client=Credit.Code_Client) and  (Client.Code_Client=Versement.Code_Client) Group By Code_Client

- ما هو الصواب؟ و إذا أردنا أيضا عرض الفارق بين الديون و المدفوعات في عمود مستقل أيضا ؟
الرد
#2
السلام عليكم

هل الكود الاول و الثاني يعملان بشكل صحيح ؟ لأنه لا يوجد التعليمة join
حاول بالآتي:

PHP كود :
select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement)
From Client INNER JOIN   Credit    on Client.Code_Client=Credit.Code_Client
INNER JOIN Versement on  Client
.Code_Client=Versement.Code_Client
Group By Versement
.Code_Client 
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
الرد
#3
Lorsque GROUPBY existe, chaque champ simple dans les projecteurs doit être dans GROUPBY

(14-02-2017, 03:10 PM)nabilkeb كتب : Lorsque GROUPBY existe, chaque champ simple dans les projecteurs doit être dans GROUPBY

للتصحيح
,Client.Code_Client
عوضا عن
,Versement.Code_Client
بعد Group By



ورغم ذلك النتائج خاطئة  نفس الإشكال
الرد
#4
السلام عليكم

جرب هذا :

PHP كود :
  select Client.Code_Client A , SUM(MonTant_Credit) B, SUM(MonTant_Versement)  C
From Client INNER JOIN   Credit    on Client
.Code_Client=Credit.Code_Client
INNER JOIN Versement on  Client
.Code_Client=Versement.Code_Client
Group By A
,B,C 
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
الرد
#5
(14-02-2017, 05:04 PM)لؤي كتب : السلام عليكم

جرب هذا :

PHP كود :
  select Client.Code_Client A , SUM(MonTant_Credit) B, SUM(MonTant_Versement)  C
From Client INNER JOIN   Credit    on Client
.Code_Client=Credit.Code_Client
INNER JOIN Versement on  Client
.Code_Client=Versement.Code_Client
Group By A
,B,C 

بارك الله فيك ، على الرد السريع و المساعدة ، لم أستوعب جيدا الكود لكن رسالة خطأ واردة
و لازال الإشكال قائما
الرد
#6
جرب مع جدولين:

PHP كود :
select Client.Code_Client A , SUM(Credit.MonTant_Credit) B 
From Client INNER JOIN   Credit  on Client
.Code_Client=Credit.Code_Client
Group By A
,B 
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
الرد
#7
لتوضيح الإشكال ،  الكود المطروح أعلاه:
كود :
select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement) From Client , Credit , Versement where (Client.Code_Client=Credit.Code_Client) and  (Client.Code_Client=Versement.Code_Client) Group By Code_Client
يعرض 3 أعمدة: كود الزبون - مجموع قيم الديون للزبون - مجموع قيم مدفوعات الزبون
عندما يكون للزبون سجل واحد في جدول الديون مثلا 18000دج ، وله أيضا 3 سجلات  في جدول المدفوعات مثلا 300دج و سجل آخر 300دج ن وسجل ثالث 1400دج
من المفروض أن تكون نتيجة الإستعلام المذكور أعلاه هي: 18000دج ديون -7400 مدفوعات
لكن نتيجة الإستعلام هي: 54000دج ديون - 7400 مدفوعات ، يعني بما أن لديه 3 سجلات للمدفوعات تم جمعها 7400دج ، قام الإستعلام بـعملية : 18000+18000+18000دج و أعطى نتيجة 54000 ، وهذا خطأ
ما هو الإستعلام الصحيح؟

(14-02-2017, 05:34 PM)nabilkeb كتب : لتوضيح الإشكال ،  الكود المطروح أعلاه:
كود :
select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement) From Client , Credit , Versement where (Client.Code_Client=Credit.Code_Client) and  (Client.Code_Client=Versement.Code_Client) Group By Code_Client
يعرض 3 أعمدة: كود الزبون - مجموع قيم الديون للزبون - مجموع قيم مدفوعات الزبون
عندما يكون للزبون سجل واحد في جدول الديون مثلا 18000دج ، وله أيضا 3 سجلات  في جدول المدفوعات مثلا 300دج و سجل آخر 300دج ن وسجل ثالث 1400دج
من المفروض أن تكون نتيجة الإستعلام المذكور أعلاه هي: 18000دج ديون -7400 مدفوعات
لكن نتيجة الإستعلام هي: 54000دج ديون - 7400 مدفوعات ، يعني بما أن لديه 3 سجلات للمدفوعات تم جمعها 7400دج ، قام الإستعلام بـعملية : 18000+18000+18000دج و أعطى نتيجة 54000 ، وهذا خطأ
ما هو الإستعلام الصحيح؟



عفوا 3000دج و ليس 300دج
الرد
#8
(14-02-2017, 05:31 PM)لؤي كتب : جرب مع جدولين:

PHP كود :
select Client.Code_Client A , SUM(Credit.MonTant_Credit) B 
From Client INNER JOIN   Credit  on Client
.Code_Client=Credit.Code_Client
Group By A
,B 

مع جدولين (جدول الزبون-جدول الديون) أو (جدول الزبون-جدول المدفوعات) يعطي نتائج صحيحة
لكني أريد عرض الحالتين: مجموع الديون - مجموع المدفوعات ، ليتم بعد ذلك حساب الفارق بينهما  (لعرض الديون الحالية أو الفعلية)
الرد
#9
(14-02-2017, 05:34 PM)nabilkeb كتب : لتوضيح الإشكال ،  الكود المطروح أعلاه:
كود :
select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement) From Client , Credit , Versement where (Client.Code_Client=Credit.Code_Client) and  (Client.Code_Client=Versement.Code_Client) Group By Code_Client
يعرض 3 أعمدة: كود الزبون - مجموع قيم الديون للزبون - مجموع قيم مدفوعات الزبون
عندما يكون للزبون سجل واحد في جدول الديون مثلا 18000دج ، وله أيضا 3 سجلات  في جدول المدفوعات مثلا 300دج و سجل آخر 300دج ن وسجل ثالث 1400دج
من المفروض أن تكون نتيجة الإستعلام المذكور أعلاه هي: 18000دج ديون -7400 مدفوعات
لكن نتيجة الإستعلام هي: 54000دج ديون - 7400 مدفوعات ، يعني بما أن لديه 3 سجلات للمدفوعات تم جمعها 7400دج ، قام الإستعلام بـعملية : 18000+18000+18000دج و أعطى نتيجة 54000 ، وهذا خطأ
ما هو الإستعلام الصحيح؟

(14-02-2017, 05:34 PM)nabilkeb كتب : لتوضيح الإشكال ،  الكود المطروح أعلاه:
كود :
select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement) From Client , Credit , Versement where (Client.Code_Client=Credit.Code_Client) and  (Client.Code_Client=Versement.Code_Client) Group By Code_Client
يعرض 3 أعمدة: كود الزبون - مجموع قيم الديون للزبون - مجموع قيم مدفوعات الزبون
عندما يكون للزبون سجل واحد في جدول الديون مثلا 18000دج ، وله أيضا 3 سجلات  في جدول المدفوعات مثلا 300دج و سجل آخر 300دج ن وسجل ثالث 1400دج
من المفروض أن تكون نتيجة الإستعلام المذكور أعلاه هي: 18000دج ديون -7400 مدفوعات
لكن نتيجة الإستعلام هي: 54000دج ديون - 7400 مدفوعات ، يعني بما أن لديه 3 سجلات للمدفوعات تم جمعها 7400دج ، قام الإستعلام بـعملية : 18000+18000+18000دج و أعطى نتيجة 54000 ، وهذا خطأ
ما هو الإستعلام الصحيح؟



عفوا 3000دج و ليس 300دج

هل من رد أو مســــاعدة ؟؟؟
الرد
#10
السلام عليكم ،
أخي نبيل بما أنك تستعمل Firebird على ما أظن ؟
لماذا لا تستخدم الحلقات في الإجراءات المخزنة Procedure stockée

مثال


كود :
For select Code_Client     FROM  Client     Into LeCodeCli DO Begin    Select Sum(MonTant_Credit)    FROM  Credit    Into TotCredit    Where (Credit.Code_Client = :LeCodeCli)    Select Sum(MonTant_Versement)    FROM  Versement    Into TotVers    Where (Credit.Code_Client = :LeCodeCli)   LeSolde = TotCredit - TotVers end


إذا تريد توضيح أكثر ، على العين و الراس.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم