احيانا قد لايكفي استعلام واحد للحصول على نتيجة معينة فنلجا الى بناء تركيبة من عدة استعلامات للوصول الى النتيجة المطلوبة.
فمثلاً في نظام الفواتير تتكون الفاتورة من جدولين:
الجدول الاول البيانات الرئيسية الثابتة للفاتورة مثل رقم الفاتورة وتاريخها واسم العميل وربما اسم الموظف الذي قام بتحريرها.
والجدول الثاني هو جدول محتويات الفاتورة والذي يحتوي على رقم الفاتورة كمفتاح غريب و الصنف والكمية وسعر الوحدة.
اما القيمة الاجمالية للصنف الواحد فيتم من خلال ضرب الكمية في سعر الوحدة وياتي ذلك من خلال استعلام.
اما اجمالي الفاتورة فيكون من خلال استعلام يقوم بجمع القيمة الاجمالية للاصناف التي تحتويها الفاتورة.
وهكذا فاننا نحتاج الى استعلام مبني على جدول المحتويات للحصول على القيمة الاجمالية للصنف الواحد
واستعلام اخر يقوم بجمع القيم الاجمالية للاصناف للحصول على مجموع الفاتورة.
كيف ذلك؟
اولا: نقوم بانشاء جدول بيانات الفواتير الرئيسية BellsTbl والذي يحتوي على الحقول
- رقم الفاتورة وهو المفتاح الرئيسي للجدول (BellId)
- اسم العميل (Customer)
- اسم الموظف(Emp)
- تاريخ الفاتورة(Bdate)
ثانيا : نقوم بانشاء جدول المحتويات(Contents) والذي يحتوي على
- رقم متسلسل للمحتويات(ContId)
- رقم الفاتورة(BellId)
- الصنف (Item)
- الكمية (mount)
- سعر الوحدة (UPrice)
الان سنقوم بتصميم استعلام للحصول على السعر الاجمالي للصنف
مبني على جدول المحتويات (Contents)
باضافة جميع الحقول وحقل جديد باسم TotalPrice وهو يساوي الكمية (Mount) مضروبة في سعر الوحدة (UPrice) كالتالي:
كود:
TotalPrice:[Mount]*[Uprice]
ثم سنحفظ الاستعلام باسم TotalContents
وهكذا حصلنا على السعر الاجمالي لكل صنف
فكيف سنحصل على قيمة الفاتورة
سننشئ استعلاما جديداً مبني على الاستعلام السابق TotalContents باختيار حقل رقم الفاتورة BellId وحقل السعر الاجمالي للصنف TotalPrice وسنغير اسم حقل السعر الاجمالي الى (قيمة الفاتورة) BellPrice بكتابة العبارة التالية في مكان العبارة TotalPrice
كود:
BellPrice:[TotalContents]![TotalPrice]
ثم سنضيف خاصية التجميع وسنضع تحت حقل السعر الاجمالي خاصية التجميع حسب المجموع Sum
سنحفظ الاستعلام باسم TotalBellPrice
الان اصبح لدينا استعلامين
ماذا لو اردنا الغاء الاستعلام الاول والاكتفاء بالاستعلام الثاني (اذا كان المطلوب فقط الحصول على قيم الفواتير الاجمالية)
الاستعلام الثاني مبني على الاستعلام الاول
لذلك علينا دمج الاستعلام الاول في الاستعلام الثاني قبل حذفه
كالتالي
افتح الاستعلام الثانيTotalBellPrice بطريقة عرض التصميم
ثم حول طريقة العرض الى SQL
ستجد العبارة مكتوبة كالتالي:
كود:
SELECT TotalContents.BellId, Sum(TotalContents.TotalPrice) AS BellPrice
FROM TotalContents
GROUP BY TotalContents.BellId
ORDER BY TotalContents.BellId;
ركز على العبارة المعلمة بالاحمر
FROM TotalContents
سنعدل عليها بوضع قوسين ثم كلمة As بين كلمة From وكلمة TotalContents
كالتالي
From () As TotalContents
الان سنبقي الاستعلام مفتوحاً
وسنفتح الاستعلام الاول TotalContents بطريقة عرض التصميم ثم سنحول طريقة العرض الى جملة SQL
سننسخ جملة الSQL وسنلصقها بين القوسين الذين اضفناهما في الاستعلام السابق
وسنلاحظ في نهاية الجملة التي الصقناها الفاصلة المنقوطة ; سنقوم بالغائها فتصبح العبارة كاملة كالتالي
كود:
SELECT TotalContents.BellId, Sum(TotalContents.TotalPrice) AS TotalBellPrice
FROM (SELECT Contents.ItemId, Contents.BellId, Contents.Item, Contents.Mount, Contents.UnitPrice, [Mount]*[UnitPrice] AS TotalPrice
FROM Contents
) AS TotalContents
GROUP BY TotalContents.BellId
ORDER BY TotalContents.BellId;
الان اغلق الاستعلامين واحفظهما
احذف الاستعلام الاول TotalContents
افتح الاستعلام الثاني بطريقة عرض التصميم ستلاحظ وجود نافذة الاستعلام المحذوف TotalContents وكانه موجود
افتح الاستعلام بطريقة العرض العادية ولاحظ البيانات لم تتغير
تمرين
نريد ان نعرض فقط اجمالي المبيعات حسب التاريخ وحذف الاستعلام TotalBellPrice
حاول تنفيذ العملية
نرجو ان يكون درسا مفيدا
وبالتوفيق
مواقع النشر (المفضلة)