delphi4arab منتديات دلفي للعرب
عرض مجموع قيم سجلات باستخدام أوامر SQL - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : عرض مجموع قيم سجلات باستخدام أوامر SQL (/showthread.php?tid=8396)

الصفحات: 1 2


عرض مجموع قيم سجلات باستخدام أوامر SQL - nabilkeb - 14-02-2017

مثال لتوضيح الإشكال
عندي 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

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


RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - لؤي - 14-02-2017

السلام عليكم

هل الكود الاول و الثاني يعملان بشكل صحيح ؟ لأنه لا يوجد التعليمة 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 



RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - nabilkeb - 14-02-2017

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



ورغم ذلك النتائج خاطئة  نفس الإشكال


RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - لؤي - 14-02-2017

السلام عليكم

جرب هذا :

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 



RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - nabilkeb - 14-02-2017

(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 

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


RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - لؤي - 14-02-2017

جرب مع جدولين:

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 



RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - nabilkeb - 14-02-2017

لتوضيح الإشكال ،  الكود المطروح أعلاه:
كود :
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دج


RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - nabilkeb - 15-02-2017

(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 

مع جدولين (جدول الزبون-جدول الديون) أو (جدول الزبون-جدول المدفوعات) يعطي نتائج صحيحة
لكني أريد عرض الحالتين: مجموع الديون - مجموع المدفوعات ، ليتم بعد ذلك حساب الفارق بينهما  (لعرض الديون الحالية أو الفعلية)


RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - nabilkeb - 15-02-2017

(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دج

هل من رد أو مســــاعدة ؟؟؟


RE: عرض مجموع قيم سجلات باستخدام أوامر SQL - أبو معاذ - 15-02-2017

السلام عليكم ،
أخي نبيل بما أنك تستعمل 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


إذا تريد توضيح أكثر ، على العين و الراس.