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

مشكلة في جملة الاستعلام (Group By)

بدأه abc_123 في 19 أبريل 2012 · 4 رد · 695 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ...

عندي سؤال في جملة الاستعلام

Dim str As String = "select A.num, B.name, sum(A.price)as total from A Join B on A.num = B.num group by (A.num)"

لنفرض ان لدينا جدولين A,B وانا بهذا الاستعلام اريد عمل حسابات على الجدول A واظهار بعض بياناته (كالرقم num والسعر price على سبيل المثال ) بينما اريد اظهار الاسم name من الجدول B , مع العلم أن الرقم num هو الرابط بين الجدولين ..

سؤالي : هذه الجملة التي كتبتها غير صحيحه عند تشغيل برنامج VB , أما إذا أزلت دالة ( sum...group by ) يعمل البرنامج بشكل صحيح !!!!فماهو الخطأ ؟؟

اتمنى يكون سؤالي واضح .. ولكم جزيل الشكر ..

#2

السلام عليكم ...

  1. لو جربنا مثل هذه الاستعلامات في الــ sql server management studio ستظهر رسالة :
    Column 'XXX' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

    يعني باختصار الحقول التي نضعها بعد الــ Select يجب أن تكون إما ضمن الــ Group by أو هي توابع التجميع (Max , Sum , Min) ..

  2. اعتقد الحل هو حذف B.name من العبارة بعد الــ select و لا مشكلة لو كان في عبارة الــ Where .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

طµط­ظٹط­ ط¥ط®ظˆظٹ طھط¸ظ‡ط± ظ†ظپط³ ط§ظ„ط±ط³ط§ظ„ط© ط§ظ„ظ„ظٹ ط¹ط±ط¶طھظ‡ط§ .. ظˆط£ظٹط¶ط§ ظ„ظˆ ط­ط°ظپطھ B.name ظٹط¹ظ…ظ„ ط¨ط´ظƒظ„ طµط­ظٹط­

ظ„ظƒظ† ط£ظ†ط§ ط¨ظ‡ط°ط§ ط§ظ„ط§ط³طھط¹ظ„ط§ظ… ط£ط±ظٹط¯ ط§ط¸ظ‡ط§ط± num ظˆ ظ…ط¬ظ…ظˆط¹ price ظ…ظ† ط¬ط¯ظˆظ„ A ظˆ name ظ…ظ† ط§ظ„ط¬ط¯ظˆظ„ B طŒ ظپظ‡ظ„ ط£ط³طھط·ظٹط¹ طں ظˆظ…ط§ظ‡ظˆ ط§ظ„طھط¹ط¯ظٹظ„ ط§ظ„ظ„ظٹ ظ…ظ…ظƒظ† ط£ط¹ظ…ظ„ظ‡ طں

-------------------------------------------------------------

إضافة:

صحيح إخوي تظهر نفس الرسالة اللي عرضتها .. وأيضا لو حذفت B.name يعمل بشكل صحيح

لكن أنا بهذا الاستعلام أريد اظهار num و مجموع price من جدول A و name من الجدول B ، فهل أستطيع ؟ وماهو التعديل اللي ممكن أعمله ؟

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 20 أبريل 2012 في 10:00 — السبب: النص يظهر مشفر بترميز windows 1256

#4

السلام عليكم ...

لدينا حالتان :

  1. إما أننا نقوم بالتجميع على B.name ايضا , فهو لن يؤثر على التجميع لأننا نجمع على A.num الذي يساوي B.num و بالتالي يمكن غدخاله في عبارة الــ Select أي :
    select A.num, B.name, sum(A.price)as total from A Join B on A.num = B.num group by A.num , B.name

  2. أو نقوم بالتجميع بشكل عادي ثم نقوم بربط ناتج الاستعلام مع الجدول B لاستخراج الأسم الموافق للــ b.num و يكون :
    SELECT * FROM 
    (select A.num,  sum(A.price)as total from A Join B on A.num = B.num group by (A.num)) AS Temp , B
    WHERE Temp.num = B.num;

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

شكرااااا جزيلا الحمدلله جربت الطريقة الاولى وضبطت

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