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

غلبتني الحيلة .. ولم أستطع صياغة جملة مناسبة !

بدأه awies في 11 أبريل 2010 · 4 رد · 598 مشاهدة · في قسم لغة الاستفسارات SQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أود صنع تقرير بسيط عن زوار المستشفى التي أعمل بها .. لعمل تقارير عن الإرساليات القادمة من مدن أخرى ..

على أن يحتوي الإستعلام على خيارات .. الإستعلام عبر إسم المريض .. الحالة .. الرقم .. المدينة .. وغيرها ..ويمكن الإستعلام بواسطة أكثر من حقل مثلا .. مريض أسمه محمد وحالته ((باطنية)) وهكذا ..

حاولت أن أربط بين الشروط بعبارة OR فكانت النتيجة أن التقرير يحضر لك من توفر فيه شرط واحد من الشروط حتى لو لم تتحقق في الباقية .. وبإستخدام AND تكون النتيجة أنه لو كانت هناك خانة فارغة في الشروط لا تأتي نتيجة في التقرير مع ان المطلوب أنه يمكنك الإستعلام بواسطة معلومتين وتترك باقي الحقول في الإستسفار فارغة .. ..

هذه محاولتي ..

SELECT ALL ERSALIA.NO, ERSALIA.CLASS, ERSALIA.NAME, ERSALIA.STAT, ERSALIA.UNIT, ERSALIA.LOC

FROM ERSALIA

where ERSALIA.NO=:pno or ERSALIA.CLASS=:pclass or ERSALIA.NAME=:pname or ERSALIA.STAT=:pstat or ERSALIA.UNIT=:punit or ERSALIA.LOC=:ploc

#2

أخي الكريم،

عندما تريد الاستعلام بمعلومية حقل قد يترك فارغاً، ولا تريد ذلك أن يؤثر في نتيجة الاستعلام، فاستخدم الدالة NVL بالشكل التالي:

ERSALIA.NAME = NVL(:pname, ERSALIA.NAME)

وعلى هذا تصبح عبارتك كالتالي:

SELECT ALL ersalia.no, ersalia.class, ersalia.name, ersalia.stat, ersalia.unit, ersalia.loc
FROM ersalia 
WHERE ersalia.no=NVL(:pno, ersalia.no) 
AND ersalia.class=NVL(:pclass, ersalia.class) 
AND ersalia.name=NVL(:pname, ersalia.name) 
AND ersalia.stat=NVL(:pstat, ersalia.stat) 
AND ersalia.unit=NVL(:punit, ersalia.unit) 
AND ersalia.loc=NVL(:ploc, ersalia.loc)

والله أعلم.

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 11 أبريل 2010 في 19:56

#3

سلمت سلمت سلمت ..

شرح رائع وحل لمشكلة اتعبتني ..

لكن لاحظت أن الطريقة يشترط فيها أن تكون كل حقول السجل ممتلئة .. أي أنها لا ترجع سجل به حقل فارغ حتى لو تحقق الشرط .. مثلا يمكن أن يكون هناك مريض ادخل رقمه لكن خانة الخصص خالية .. لا يتم إرجاعه حتى لو كان الرقم صحيحا ..

شكرا جزيلا لك على إهتمامك ..

#4

حياك الله أخي الكريم،

حاول أن تستخدم شيئاً مثل التالي:

NVL(ersalia.class, 'w') = NVL(:class, NVL(ersalia.class, 'w'))

وهكذا مع بقية الحقول في المقارنات في مقطع WHERE. بهذا الشكل، نعوض عن القيم الخالية بأي قيمة (هنا، الحرف w)، مما يستبعد مشاكل المقارنة مع القيم الخالية، والله أعلم.

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 12 أبريل 2010 في 06:42

#5

سلمت سلمت سلمت ..

المشكلة انتهت .. أدامك الله أخا وصديقا ..

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…