الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في تعليمة sql

مغلق
بدأه ابن اليمن في 26 يوليو 2007 · 13 رد · 1,986 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا شباب

اريد مساعدة في تعليمة sql

لدي هذا الجدول

رقم الصنف الكمية

1 5

1 8

2 5

2 6

و اريد ان يظهر بالتقرير كاالاتي

رقم الصنف الكمية

1 13(لان 8+5=13)

2 11(لان 5+6=11)

لذلك استخدمت الكود الاتي

with query do

close;

SQL.Clear;

SQL.Add('select number,sum(quality) as quality from table group by number,quality');

open;

ولكنه لم يفي بالغرض

هل من مساعدة

جزاكم الله خيرا

#2
SQL.Add('select number,sum(quality) as quality from table group by number');

quality <> quantity?!

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

شكرا لك اخي

ولكن ماذا في حالة اني اريد عمل استعلام لاخذ بيانات من اكثر من جدول

مثال:-

لدي في الجدول الاول مايلي

رقم الصنف(pk) بضاعة اول المدة

1 150

2 200

و لدي في الجدول الثاني مايلي

رقم الصنف(not pk) الصادر الوارد

1 2 4

1 1 2

1 3 6

2 2 4

2 5 7

واريد ان يظهر التقرير كما يلي

رقم الصنف الرصيد(بضاعةاول المدة من الجدول الاول + الصادر من الجدول الثاني - الوارد من الجدول الثالث)

1 156(150+4+2+6-2-1-3)

2 204(200+4+7-2-5)

لذلك لا ادري ماهو الكود المناسب لذلك مع العلم اني استخدمت هذا الكود لكنه لم يفي بالغرض لانه استعلام من جدول واحد

with query do begin

close;

SQL.Clear;

SQL.Add('select number,sum(quality) as quality from table where date between :P1 and :P2 and group between :P1 and :P2 group by number');

ParamByName('p3').AsDate := strtodate(edit1.text);

ParamByName('p4').AsDate := strtodate(edit2.Text);

ParamByName('p1').Asinteger := strtoint(edit3.Text);

ParamByName('p2').Asinteger := strtoint(edit4.Text);

open;

end;

حيث ان numberهو الرقم في الجدول الاول و quality هي بضاعة اول المدة في الجدول الاول ايضا

#4

وينكم شباب مافي تجاوب

بعد عدة محاولات جربت هذا الكود

Select Number, Sum(quality+q1-q2) from

(

Select Table1.Number, Sum(Table1.Quality) as quality, sum(Table2.q1) as q1, Sum(Table2.q2) as q2 from Table1 inner join Table2 on Table1.Number = Table2.Number

group by Number)

ولكن اعطاني خطا في صيغة sql??

هل من مساعدة

ابن اليمن

#5

شباب ما اظن السوال بها الصعوبة

معقول قراءة 70 بدون رد

#6

حاول انشاء view يتعامل مع جميع الملفات التى تريد ومن هذا view يمكنك استخراج ماتشاء وبسهولة

#7

Select Table1.Number, Sum(Table1.Quality) as quality, sum(Table2.q1) as q1, Sum(Table2.q2) as q2 from Table1 ,Table2 where Table1.Number = Table2.Number

group by Number)

#8

شكرا لك اخي على تجاوبك

ولكن المشكلة انه يظهر الحقل number

ولكن لا يظهر sum(quality)+sum(q1)-sum(q2)

لا ادري لماذا

هل من مساعدة؟؟

#9

الحقول التي لم تظهر ويعطيك خطأ

لأن SQL لا يقبل عمليات حسابية على الحقول التي يتم حسابها بـ SUM, AVRG, MAX, MIN, ...

SELECT T1.Number, T1.Quality, SUM(T2.Q2-T2.Q1) AS S1

FROM Table1 T1 INNER JOIN Table2 T2 ON T1.Number=T2.Number

GROUP BY T1.Number, T1.Quality

عليك إضافة حقل حسابي (calculfield) في tquery يقوم هذا الحقل بحساب الرصيد

إليك الكود التالي حيث عليك وضعه في الحدث oncalculfields

Query.FieldByName('Solde').AsFloat:= Query.FieldByName('Quality').AsFloat+Query.FieldByName('S1').AsFloat

#10
اقتباس
الحقول التي لم تظهر ويعطيك خطأ

لأن SQL لا يقبل عمليات حسابية على الحقول التي يتم حسابها بـ SUM, AVRG, MAX, MIN, ...

من قال لك هذا اخي الكريم؟ و عن اي نوع قواعد بيانات تتحدث؟

اخ ابن اليمن هل من شرح افضل لما هي المشكلة الان, و اذا هناك مثال بسيط يوضح المشكلة و الخطأ؟

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#11

الاخوة الملف في المرفقات ياليت المساعدة

_________________sql.rar

#12

جرب تبديل التعليمة بالتالي:

Insert into table3 Select Table1.Number, (Sum (Table1.Quality) + sum (Table2.q1) - Sum (Table2.q2)) from Table1, Table2 
		    where Table1.Number = Table2.Number
                    group by Number)

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#13

إنك محق wael فلقد كانت عندي معلومة خاطئة قد صححتها من خلال هذه المناقشة

الكود الذي وضعته جيد لكن يوجد فيه خطأ حسابي وحيد وهذا الكود الجديد أظن أنه سيفي بالغرض

Insert into table3
Select Table1.Num, ((Sum(Table1.Quality)/Count(Table1.Quality)) - sum (Table2.q1) + Sum (Table2.q2))
from Table1, Table2
where Table1.Num = Table2.Num
group by Num
#14

الاخ وائل جزاك الله خيرا

الاخ ghostdz انت محق فعلا هناك خطا حسابي في الكود الذي طرحه الاخ وائل وهو

انه Sum(Table1.Quality يقوم بضربها ب 2

و الكود الذي وضعته اخي ghostdz كود صحيح او يمكن استبداله بالاتي

Insert into table3

Select Table1.Num, ((Table1.Quality)- sum (Table2.q1) + Sum (Table2.q2))

from Table1, Table2

where Table1.Num = Table2.Num

group by Num

لاحظ انه(Table1.Quality

من غير sum

تم تعديل هذه المشاركة بواسطة ابن اليمن في 6 أغسطس 2007 في 18:56

هذا الموضوع مغلق.

مواضيع مشابهة