اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر

عند ضم جدولين أو أكثر تكون القيم التي تقوم بضمها في بعض الأحيان غير متتطابقة تمامًا بين الجداول. وهناك العديد من الطرق لحل هذا الأمر، ومن ضمن هذه الطرق يمكن إستخدام جملة CASE عند ربط الجداول معًا، وذلك عند تحديد قيمة الحقل مكان ON.

بفرض أن لدينا جدول orders يحتوي على معلومات عن طلبات العملاء وهو على الشكل التالي:

a.png.aaaa9562db2828b9f85c4a436e7c7b11.png

لاحظي كيف أن لنفس العميل أكثر من قيمة cust_num متشابهة.

وأيضًا لدينا الجدول cust_table والذي يحتوي على معلومات حول العملاء أنفسهم:

b.png.f301d8c51b03a7c610a1cb071e3055aa.png

الآن عندما نقوم بعمل ربط بين الجدولين عن طريقة cust_num نجد أن النتيجة كالتالي:

result.png.3941fb7c9f233b82138cd739785922f0.png

لاحظي وجود قيم NULL في حقل residence وذلك لعدم تشابهة قيمة الحقل cust_num بين الجدولين.

لحل هذه المشكلة، يمكن الإستعانة بجملة CASE عند الربط بين الجدولين كالتالي:

SELECT a.*, b.residence

FROM orders AS a
LEFT JOIN cust_table AS b

ON CASE 
	-- إزالة الرمز -EC من نهاية رقم العميل cust_num إن وجد
	WHEN a.cust_num LIKE '%-EC' THEN SUBSTRING(a.cust_num, 1, LEN(a.cust_num) - 3)
    
    -- في حالة لم يتم العثور على الرمز -EC في رقم العميل فلا حاجة لإستخدام الدالة SUBSTRING
	ELSE a.cust_num END = b.cust_num

ORDER BY
	order_year

عند تنفيذ الإستعلام السابق سوف تكون النتيجة كالتالي:

61638c17cb729_correctresult.png.54f169c4ad77d6c11987f3afb63ec0ab.png

بهذا الشكل لن يحتوي الجدول على قيم NULL وسيتم تعويضها بالبيانات بشكل سليم.

لمعرفة المزيد حول CASE في SQL يمكن الإطلاع على هذه المقالة:

أو من خلال موسوعة حسوب حول لغة SQL من هنا

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...