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

أستفسار عن إستخدام Sum - في جملة Select

بدأه wael_elshafey في 1 أغسطس 2010 · 8 رد · 1,362 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أخواني هل يوجد مثال علي الجملة التالية

select field1,isnull(sum(field2)) from tbl

ولي إستفسار أخر

هل يمكن فرز عمودين كل منهما بين تاريخين مختلفين في جملة Select

#2

السلام عليكم

المثال السابق لا يعمل تحتاج الى group by

اي التقسيم الى مجموعات بحسب field1

بالتاكيد اخي الكريم استخدم ال group by

In bad state

#3

بسم الله الرحمن الرحيم

شكرا أخي الفاضل علي ردك

بالفعل أنا ستخدم الكود التالي

select field1,isnull(sum(field2)) from tbl group by field1

والكود يعمل إذا لم أستخدم ISNULL وغرضي من إستخدامها هو

عندما أستخدم SUM فأنه في حالة وجود حقول فارغه لا يرجع قيمه وتظهر الصفوف التي تحتوي علي قيم فقط

وعندما بحثت عن ذلك وجدت في إحدي المنتديات الأجنبية الصيغة التالية

select field1,isnull(sum(field2),0) from tbl group by field1

ولكن للأسف يظهر خطأ عند التشغيل وأنا أستخدم هذا الكودة في عملية جرد للمخزن وقمت بحل هذه المشكلة حل مؤقت بإستخدام الحلقات ومقارنة القيم

أما بالنسبة للأستفسار الثاني

هل يمكن فرز عمودين كل منهما بين تاريخين مختلفين في جملة Select

حيث أريد أستخدامه في في جرد المخزن ويكون الناتج

الرصيد الإفتتاحي(بين تاريخين- البداية حتي نهاية الشهر الماضي)

الرصيد الختامي (بين تاريخين- البداية حتي نهاية الشهر الحالي)

قمت بحل هذه المشكلة بإنشاء جدولين datatable وقمت بمقارنة البيانات ولكني أريد إستخدام جملة واحده فهل يمكن ذلك

وشكرا جدأ علي سرعة ردك

#4

بسم الله الرحمن الرحيم

اخى العزيز

بالنسبة للسوال الاول الحل ده صح مفيش فيه مشكلة

تاكد بس انت من الجدول لو فيه نصوص مثلا او اعمل له convert

بالنسبة للسوال التانى انت ممكن تستخدم

union

هيجيب لك الحقول اللى بتاريخ معين

مع حقول مع تاريخ تانى

جرب و انا معك

1
#5

بسم الله الرحمن الرحيم

شكرا أخي الكريم علي الرد

لقد قمت بالتطبيق علي مثال في المرفقات

ولكن النتائج ليست كما أريد وقمت بالتعليق بجانب الأكواد في المثال

أكون شاكرا جدا إذا قمت بتحميل هذا المثال والتعليق عليه

أنتظر الرد وشكرا

Union.rar

#6

بسم الله الرحمن الرحيم

اخى العزيز

بعد التحية

المفروض عليك من الاول كنت قلت انك بتستخدم access

الرباط الخاص بي

#7

بسم الله الرحمن الرحيم

في البداية أود أن أشكرك علي إهتمامك والرد

بالتسبة للزر (ISNULL) أود في حالة عدم وجود نتيجة للجمع يتم وضع صفر

بمعني أخر في المثال أقوم بفرز البيانات بين تاريخين 01/07/2010 حتي 31/07/2010 فيكون الناتج للعنصرين A,B فقط. حيث أن العنصر C بداية دخولة كانت 02/08/2010 فلا يظهر في عملية الفرز

ولكني أريد في هذه الحالة تظهر قيمته صفر . وعندما بحثت إنه يمكنني أن أستخدم الدالة التالية

isnull(sum(Amount),0)

أي في حالة عدم وجود قيمة للجمع يتم وضع القيمة صفر. ولكن للأسف عند إستخدامي لهذه الدالة يظهر خطأ

بالنسبة للزر Union أود عند الفرز يظهر أريع أعمده

الأول رقم العنصر

الثاني وصف العنصر

الثالث نتيجة الفرز من 01/07/2010 إلي 31/07/2010

الرابع نتيجة الفرز من 01/08/2010 إلي 31/08/2010

ولكن عندما أقوم بتنفيذ الكود يتم دمج الجدولين الثالث والرابع

شكرا علي إهتمامك وأنتظر الرد

#8

بسم الله الرحمن الرحيم

اخى العزيز

لسه فاهم قصدك سورى اسف

الرباط الخاص بي

على فكرة

ISNULL مش موجودة فى اكسيس و الله فيه مكانها حاجة تانية اسمها تقريبا NZ

انا عملت لك الطلب الاول تقدر انت تعمل الطلب التانى بنفس الفكرة

تم تعديل هذه المشاركة بواسطة bodaman22 في 4 أغسطس 2010 في 10:57

#9

بسم الله الرحمن الرحيم

شكرا يا أخي علي متابعتك لهذا الموضوع

بالنسبة للأستفسار الأول

فقد كنت أستخدمت نفس فكرتك ولكن مع إختلاف بسيط فقد أستخدمت For ... Next ومقارنة البيانات بـ IF لأنه عند عدم إستخدام جملة IF يتم وضع البيانات بالترتيب ويكون التائج خطأ

بمعني أخر في المثال الحالي لا يوجد أي إدخالات للعنصر C خلال شهر 7 فيكون الناتج للعنصر C صفر وهذه النتيجه صحيحه

قم بوضع قيم للعنصر C خلال شهر 7 وحذف قيم العنصر A خلال شهر 7

ستجد أن الناتج أن عنصر C يساوي صفر !! لماذا لأن عملية عرض البيانات تتم بالترتيب لعدم وجود شرط

ولكني كنت أطمع في أن أجد جملة مباشرة تعطيني الناتج دون إستخدام حلقات لأن قاعدة البيانات التي أتعامل معها بها أكثر من 3000 عنصر وهذا يعطي نسبة إحتمال للخطأ

ولكن بالنسبة اللأستفسار الثاني فإنه عند إستخدام الكود التالي

select ItemId,ItemDescription, sum(Amount) from tblstore where Sdate between #07/01/2010# and #07/31/2010# group by ItemId,ItemDescription union select ItemId,ItemDescription, sum(Amount) from tblstore where Sdate between #08/01/2010# and #08/31/2010# group by ItemId,ItemDescription

يكون الناتج ثلاثة أعمده فقط حيث يتم دمج جملتي الجمع

ولكني أريد أن أحصل علي عمود منفصل لكل عملية جمع

وأنتظر ردك

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