بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
أعمل على vb.net وقواعد بيانات sql server
لدي مشكلة اتوقع انها بسيطة لكنها استعصت علي
مشكلتي بكل بساطة عندما اقوم بعملية طرح لقيمتين من جدولين مربوطين ببعض تتم العملية بنجاح
لكن المشكلة عندما تكون إحدى القيمتين null يعطي نتيجة 0 لماذا؟؟!!
وكذلك إذا كان السجل في الجدول الأول لا يوجد له نظير في الجدول الثاني يعطي نتيجة 0 لماذا؟؟!!
وعليكم السلام ورحمة الله وبركاته
أمامك حلين
الأول وضع قيمة افتراضية (صفر) Default value للأعمدة الرقمية في قاعدة البيانات.
الثاني في الاستعلام يتم تحويل null إلى الرقم صفر مثل
كود :
SELECT COALESCE(column1,0) + COALESCE(column2,0) AS value
FROM table1
الحل الأول مريح عند كتابة الاستعلامات لأنه لن تكون حاجة لتحويل null
(وكذلك إذا كان السجل في الجدول الأول لا يوجد له نظير في الجدول الثاني يعطي نتيجة 0 لماذا؟؟!!) غير مفهومة
Null = باختصار حالة عدم
كما أسلف محمد كريم هي ليست قيمة
بل هي حالة
حالة الحقل عدم لا قيمة نصية ولا عددية
للتفادى هذه المشكلة اعمل كما قال الاخ ممدوح
خصوصا الأول اذا كنت مبتديء
بالتوفيق
شكرا للأخ ممدوح
شكرا للأخ محمد كريم
شكرا للأخ أبوعمر
افدتوني في النقطة الأولى
لكن بخصوص النقطة الثانية كيف الحل؟؟
النقطة الثانية:
وكذلك إذا كان السجل في الجدول الأول لا يوجد له نظير في الجدول الثاني يعطي نتيجة 0 لماذا؟؟!!
مثال
اذا كان عندي جدول للعملاء وفيه (رقم العميل/ اسم العميل / اجمالي المديونيات على العميل)
وعندي جدول ثاني لدفعات العملاء وفيه ( رقم الدفعة / المبلغ / رقم العميل )
طبعا الجدولين مربوطين برقم العميل
اذا كان يوجد عميل عليه مديونية ولم يسدد أي دفعة فبالتأكيد لن يكون له سجل في جدول الدفعات
وعندما نريد أن نحسب (اجمالي المديونيات على العميل - اجمالي الدفعات ) راح يعطي نتيجة خطأ لأن العميل غير موجود بالأساس في جدول دفعات العملاء
كيف اجعل البرنامج اذا ما حصل سجل للعميل في جدول الدفعات يعتبر اجمالي الدفعات (0) ؟؟
طيب لتفادي المشاكل المفروض نتحقق اولا من وجود سجلات للعميل في جدول الدفعات قبل الاستعلام عن قيمة الدفعات والتي تساوي null في هذه الحالة
في استعلامات sql يمكننا تحديد قيمة افتراضية لارجاعها في حالة عدم تحقق شرط معين داخل الاستعلام
يعني في الاستعلام لو لم يجد معاملة للعميل داخل جدول الدفعات يرجع لنا قيمة 0
وهذا ما وضحه الاخ ممدوح
ربما انت بحاجة الى التعرف على EXISTS و NOT EXISTS لتساعدك على التحكم في شروط الاستعلام
روابط قد تفيدك :
http://codereview.stackexchange.com/ques...ault-value
http://weblogs.sqlteam.com/mladenp/archi...60210.aspx
شكرا لكم جزيلا
جربت COALESCE وضبطت معي بحيث إذا لم يجد تسجيل في الجدول الاخر يخصم من صفر
شكرا لكم
واجهتني مشكلة في نفس الموضوع بس عندما اعمل view من جدولين في sql server لا يقوم الview بعرض جميع السجلات بل يعرض السجلات المشتركة بين الجدولين