استخدام استعلام موحد لدمج عدة استعلامات في نتيجة واحدة

ينطبق على
Access لـ Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

قد ترغب في بعض الأحيان في دمج سجلات من جدول أو استعلام واحد مع سجلات من جدول واحد أو أكثر في نتيجة واحدة. هذا ما يفعله الاستعلام الموحد في Access.

لفهم الاستعلامات الموحدة بشكل فعّال، يجب أولاً أن تكون على دراية بكيفية تصميم استعلامات التحديد الأساسية في Access. للتعرّف على المزيد حول كيفية تصميم استعلامات تحديد، اطلع على إنشاء استعلام تحديد بسيط.

دراسة مثال لاستعلام موحد قيد العمل

إذا لم تكن قد أنشأت استعلاما موحدا من قبل، فقد يساعد أولا في دراسة مثال عمل في قالب Northwind Access. يمكنك البحث عن نموذج قالب Northwind في صفحة البدء في Access عن طريق تحديد ملف>جديد. يمكنك أيضا تنزيل نسخة مباشرة من نموذج قالب Northwind.

بعد أن يفتح Access قاعدة بيانات Northwind، قم بتجاهل مربع حوار تسجيل الدخول الذي يظهر أولا، ثم قم بتوسيع جزء التنقل. حدد الجزء العلوي من جزء التنقل، ثم حدد نوع العنصر لتنظيم كافة كائنات قاعدة البيانات حسب النوع. بعد ذلك، قم بتوسيع مجموعة Queries ، وسترى استعلاما يسمى Product Transactions.

من السهل التمييز بين الاستعلامات الموحدة وعناصر الاستعلام الأخرى نظراً لأنها تحتوي على رمز خاص يشبه دائرتين متشابكتين يمثلان مجموعة متحدة من مجموعتين:

لقطة شاشة لرمز استعلام موحد في Access. على عكس استعلامات التحديد والإجراءات العادية، لا ترتبط الجداول في استعلام موحد. وهذا يعني أنه لا يمكنك استخدام مصمم استعلام رسومات Access لإنشاء استعلامات الاتحاد أو تحريرها. إذا فتحت استعلاما موحدا من "جزء التنقل"، فسيفتحه Access ويعرض النتائج في طريقة عرض ورقة البيانات. ضمن طرق العرض على علامة التبويب الصفحة الرئيسية ، لاحظ أن طريقة عرض التصميم غير متوفرة عند العمل مع الاستعلامات الموحدة. يمكنك التبديل فقط بين طريقة عرض ورقة البيانات وطريقة عرض SQL.

لمتابعة دراستك لمثال الاستعلام الموحد هذا، انقر فوقطرق عرض>الصفحة الرئيسية>SQL View لعرض بناء الجملة SQL الذي يعرفه. في هذا الرسم التوضيحي، أضفنا بعض التباعد الإضافي في SQL بحيث يمكنك بسهولة رؤية الأجزاء المختلفة التي تشكل استعلام موحد.

لنلق نظرة على SQL بناء جملة هذا الاستعلام الموحد من قاعدة بيانات Northwind بالتفصيل:


SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

الجزءان الأول والثالث من عبارة SQL هذه هما في الأساس استعلامي تحديد. تسترد هذه الاستعلامات مجموعتين مختلفتين من السجلات؛ أحدهما من جدول طلبات المنتج والآخر من جدول مشتريات المنتجات.

الجزء الثاني من هذه SQL العبارة UNION هو الكلمة الأساسية التي تخبر Access بدمج هاتين المجموعتين من السجلات.

يحدد الجزء الأخير من هذه SQL العبارة ترتيب السجلات المجمعة باستخدام عبارة ORDER BY . في هذا المثال، يطلب Access جميع السجلات حسب حقل "تاريخ الطلب" بترتيب تنازلي.

ملاحظة

تكون الاستعلامات الموحدة للقراءة فقط دائماً في Access؛ لا يمكنك تغيير أي قيم في طريقة عرض ورقة البيانات.

إنشاء استعلام موحد عن طريق إنشاء استعلامات التحديد ودمجها

على الرغم من أنه يمكنك إنشاء استعلام موحد عن طريق كتابة بناء الجملة SQL مباشرة في طريقة عرض SQL، فقد تجد أنه من الأسهل إنشاؤه في أجزاء باستخدام استعلامات التحديد. يمكنك بعد ذلك، نسخ أجزاء SQL ولصقها في استعلام موحد مدمج.

إذا كنت ترغب في تخطي قراءة الخطوات ومشاهدة مثال بدلاً من ذلك، فاطلع على المقطع التالي، مشاهدة مثال لإنشاء استعلام موحد.

  1. على علامة التبويب إنشاء، في المجموعة استعلامات، انقر فوق تصميم الاستعلام.
  2. انقر نقرا مزدوجا فوق الجدول الذي يحتوي على الحقول التي تريد تضمينها. يُضاف الجدول إلى نافذة تصميم الاستعلام.
  3. في نافذة تصميم الاستعلام، انقر نقراً مزدوجاً فوق كل حقل من الحقول التي تريد تضمينها. عند تحديد الحقول، تأكد من إضافة عدد الحقول نفسه الذي أضفته إلى استعلامات التحديد الأخرى، وبالترتيب نفسه. انتبه إلى أنواع البيانات الخاصة بالحقول، وتأكد من أنها تتضمن أنواع بيانات متوافقة مع الحقول الموجودة في المكان نفسه في الاستعلامات الأخرى التي تقوم بدمجها. على سبيل المثال، إذا كان استعلام التحديد الأول يتضمن خمسة حقول، ويحتوي الحقل الأول على بيانات التاريخ/الوقت، فتأكد من أن كل استعلام تحديد من استعلامات التحديد الأخرى التي تقوم بدمجها يشتمل على خمسة حقول أيضاً، يحتوي أولها على بيانات التاريخ/الوقت، وهكذا.
  4. يمكنك، بشكل اختياري، إضافة معايير إلى الحقول عن طريق كتابة التعبيرات المناسبة في الصف "معايير" الخاص بشبكة الحقل.
  5. بعد الانتهاء من إضافة الحقول ومعايير الحقل، يجب تشغيل استعلام التحديد ومراجعة الإخراج الخاص به. ضمن علامة التبويب تصميم، في المجموعة نتائج، انقر فوق تشغيل.
  6. بدّل الاستعلام إلى طريقة عرض التصميم.
  7. احفظ استعلام التحديد، واتركه مفتوحاً.
  8. كرر هذا الإجراء لكل استعلامات التحديد التي تريد دمجها.

الآن بعد أن قمت بإنشاء استعلامات التحديد الخاصة بك، حان الوقت لدمجها. في هذه الخطوة، يمكنك إنشاء الاستعلام الموحد عن طريق نسخ العبارات ولصقها SQL .

  1. على علامة التبويب إنشاء، في المجموعة استعلامات، انقر فوق تصميم الاستعلام.
  2. ضمن علامة التبويب تصميم، في المجموعة استعلام، انقر فوق موحد. يخفي Access نافذة تصميم الاستعلام ويعرض علامة تبويب كائن عرض SQL . عند هذه النقطة، تكون علامة التبويب فارغة.
  3. انقر فوق علامة التبويب الخاصة باستعلام التحديد الأول الذي تريد دمجه في الاستعلام الموحد.
  4. على علامة التبويب الصفحة الرئيسية ، انقر فوق عرض>طريقة عرض SQL.
  5. انسخ SQL عبارة لاستعلام التحديد. انقر فوق علامة التبويب الخاصة بالاستعلام الموحد الذي بدأت في إنشائه مسبقاً.
  6. الصق SQL عبارة استعلام التحديد في علامة تبويب كائن SQL View في الاستعلام الموحد.
  7. احذف الفاصلة المنقطة (;) في نهاية عبارة استعلام SQL التحديد.
  8. اضغط على مفتاح الإدخال Enter لنقل المؤشر لأسفل سطر واحد، ثم اكتب UNION على السطر الجديد.
  9. انقر فوق علامة التبويب الخاصة باستعلام التحديد التالي الذي تريد دمجه باستعلام التوحيد.
  10. كرر الخطوات من 5 إلى 10 حتى تقوم بنسخ جميع SQL عبارات استعلامات التحديد ولصقها في نافذة طريقة عرض SQL للاستعلام الموحد. لا تحذف الفاصلة المنقطة أو اكتب أي شيء يتبع SQL عبارة لاستعلام التحديد الأخير.
  11. من علامة التبويب تصميم، في المجموعة النتائج، انقر فوق تشغيل.

تظهر نتائج الاستعلام الموحد في طريقة عرض ورقة البيانات.

مشاهدة مثال حول إنشاء استعلام موحد

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

فيما يلي الخطوات اللازمة لإنشاء هذا المثال:

  1. قم بإنشاء استعلامي تحديد باسم "استعلام 1" و"استعلام 2" باستخدام جداول "العملاء" و"الموردين" على التوالي كمصادر بيانات. استخدم حقول "الاسم الأول" و"اسم العائلة" كقيم للعرض.

  2. قم بإنشاء استعلام جديد يسمى "استعلام 3" بدون مصدر بيانات في البداية ثم انقر فوق الأمر موحد على علامة التبويب تصميم لتحويل هذا الاستعلام إلى استعلام "موحد".

  3. قم بنسخ عبارات SQL ولصقها من استعلام 1 واستعلام 2 في استعلام 3. تأكد من إزالة فاصلة منقوطة إضافية وإضافة UNION الكلمة الأساسية. يمكنك بعد ذلك التحقق من النتائج في طريقة عرض ورقة البيانات.

  4. أضف عبارة ترتيب إلى أحد الاستعلامات، ثم الصق العبارة ORDER BY في الاستعلام الموحد في طريقة عرض SQL. لاحظ أن في "الاستعلام 3"، الاستعلام الموحد، عندما يكون الطلب على وشك الإلحاق، تتم أولاً إزالة الفواصل المنقوطة، ثم اسم الجدول من أسماء الحقول.

  5. النهائي SQL الذي يجمع الأسماء ويفرزها لمثال استعلام الاتحاد هذا هو التالي:

    SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    ORDER BY [Last Name], [First Name];
    

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

يمكنك الاطلاع على المقاطع المتبقية من هذه المقالة للتعرّف على المزيد من التلميحات والنصائح حول استخدام الاستعلامات الموحدة.

دمج ثلاثة أو أكثر من الجداول أو الاستعلامات في استعلام موحد

في المثال من القسم السابق الذي يستخدم قاعدة بيانات Northwind، يتم دمج البيانات من جدولين فقط. ومع ذلك، يمكنك دمج ثلاثة من الجداول أو أكثر بسهولة في استعلام موحد. على سبيل المثال، استناداً إلى المثال السابق، قد ترغب أيضاً في تضمين أسماء الموظفين في إخراج الاستعلام. يمكنك تنفيذ هذه المهمة عن طريق إضافة استعلام ثالث والدمج مع عبارة SQL السابقة مع كلمة أساسية إضافية "UNION " كما يلي:


SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

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


SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

فيما يلي كيفية ظهور النتيجة في طريقة عرض ورقة البيانات. يعرض Access سجلات الأمثلة الخمسة التالية:

التوظيف اسم العائلة الاسم الأول
داخل الشركة هوتاكي آيلة
داخل الشركة ناتشي علياء
المورّد معلوف عبد الوهاب
العميل سراف مختار
العميل صايغ مجاهد

يمكنك تقليل الاستعلام بشكل أكبر لأن Access يقرأ أسماء حقول الإخراج فقط من الاستعلام الأول في استعلام موحد. هنا، تتم إزالة الإخراج من قسمي الاستعلام الثاني والثالث:


SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers

UNION

SELECT "In-house", [Last Name], [First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

التصفية في استعلامات الاتحاد

في استعلام Access الموحد، يسمح بالترتيب مرة واحدة فقط، ولكن يمكنك تصفية كل استعلام على حدة. بناء على استعلام موحد للقسم السابق، إليك مثالا يقوم بتصفية كل استعلام عن طريق إضافة عبارة WHERE .


SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"

UNION

SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"

ORDER BY [Last Name], [First Name];

قم بالتبديل إلى طريقة عرض ورقة البيانات وستظهر النتائج مماثلة لما يلي:

التوظيف اسم العائلة الاسم الأول
المورّد باز فاضلة
داخل الشركة هوتاكي آيلة
العميل قريشي رجب
داخل الشركة سماحة نيهاد
المورّد بتلوني خديجة
العميل سلمان امتياز
المورّد حكيمي ثقيب
المورّد شعبان ناجي
داخل الشركة معروف نابغة
المورّد أسود ملكة
داخل الشركة كزبري غدي

الجمع بين أنواع البيانات

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

لفهم كيفية عمل ذلك، سنستخدم الاستعلام الموحد الخاص بـ معاملات المنتج في قاعدة بيانات نموذج Northwind. افتح نموذج قاعدة البيانات هذا، ثم افتح الاستعلام "معاملات المنتج" في طريقة عرض ورقة البيانات. يجب أن تكون السجلات العشرة الأخيرة مماثلة لهذا الإخراج:

معرّف المنتج تاريخ الطلب اسم الشركة المعاملات الكمية
77 2006/1/22 مورّد ب شراء 60
80 2006/1/22 المورّد د شراء 75
81 2006/1/22 مورد أ شراء 125
81 2006/1/22 مورد أ شراء 200
7 2006/1/20 الشركة د بيع 10
51 2006/1/20 الشركة د بيع 10
80 2006/1/20 الشركة د بيع 10
34 2006/1/15 الشركة أأ بيع 100
80 2006/1/15 الشركة أأ بيع 30

لنفترض أنك تريد تقسيم حقل الكمية إلى حقلين: الشراء والبيع. لنفترض أيضا أنك تريد قيمة صفرية ثابتة للحقل بدون قيمة. إليك الشكل الذي يبدو عليه SQL استعلام الاتحاد هذا:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

في حالة التبديل إلى طريقة عرض ورقة البيانات، فسترى السجلات العشرة الأخيرة المعروضة الآن كما يلي:

معرّف المنتج تاريخ الطلب اسم الشركة المعاملات شراء بيع
74 2006/1/22 مورّد ب شراء 20 0
77 2006/1/22 مورّد ب شراء 60 0
80 2006/1/22 المورّد د شراء 75 0
81 2006/1/22 مورد أ شراء 125 0
81 2006/1/22 مورد أ شراء 200 0
7 2006/1/20 الشركة د بيع 0 10
51 2006/1/20 الشركة د بيع 0 10
80 2006/1/20 الشركة د بيع 0 10
34 2006/1/15 الشركة أأ بيع 0 100
80 2006/1/15 الشركة أأ بيع 0 30

تابع هذا المثال، ماذا لو كنت تريد أن تكون الحقول ذات القيم الصفرية فارغة؟ يمكنك تعديل SQL لعرض لا شيء بدلا من الصفر عن طريق إضافة Null الكلمة الأساسية، كما هو موضح هنا:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

على الرغم من ذلك، نظراً لأنك قد لاحظت التبديل إلى طريقة عرض ورقة البيانات، لديك الآن نتيجة غير متوقعة. في العمود "شراء"، يتم مسح كل حقل:

معرّف المنتج تاريخ الطلب اسم الشركة المعاملات شراء بيع
74 2006/1/22 مورّد ب شراء
77 2006/1/22 مورّد ب شراء
80 2006/1/22 المورّد د شراء
81 2006/1/22 مورد أ شراء
81 2006/1/22 مورد أ شراء
7 2006/1/20 الشركة د بيع 10
51 2006/1/20 الشركة د بيع 10
80 2006/1/20 الشركة د بيع 10
34 2006/1/15 الشركة أأ بيع 100
80 2006/1/15 الشركة أأ بيع 30

ويحدث هذا نظراً لأن Access يحدد أنواع بيانات الحقول من الاستعلام الأول. في هذا المثال، لا تعتبر القيمة "Null" رقماً.

ماذا يحدث إذا حاولت إدراج سلسلة فارغة للقيمة الفارغة للحاويات؟ SQL قد تبدو هذه المحاولة كما يلي:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

عند التبديل إلى طريقة عرض ورقة البيانات، سترى أن Access يسترد القيم "شراء"، ولكنه قام بتحويل القيم إلى نص. يمكنك معرفة أن هذه هي قيم نصية لأنه تمت محاذاتها إلى اليمين في طريقة عرض ورقة البيانات. السلسلة الفارغة في الاستعلام الأول ليست رقماً وهذا هو سبب ظهور هذه النتائج. كما ستلاحظ أن قيم "البيع" يتم تحويلها أيضاً إلى نص لأن سجلات الشراء تحتوي على سلسلة فارغة.

معرّف المنتج تاريخ الطلب اسم الشركة المعاملات شراء بيع
74 2006/1/22 مورّد ب شراء 20
77 2006/1/22 مورّد ب شراء 60
80 2006/1/22 المورّد د شراء 75
81 2006/1/22 مورد أ شراء 125
81 2006/1/22 مورد أ شراء 200
7 2006/1/20 الشركة د بيع 10
51 2006/1/20 الشركة د بيع 10
80 2006/1/20 الشركة د بيع 10
34 2006/1/15 الشركة أأ بيع 100
80 2006/1/15 الشركة أأ بيع 30

كيف يمكنك حل هذا اللغز؟

أحد الحلول هو إجبار الاستعلام على توقع أن تكون قيمة الحقل رقما. يمكنك القيام بذلك باستخدام هذا التعبير:


IIf(False, 0, Null)

الشرط للتحقق، ، Falseهو أبدا True، لذلك يرجع Nullالتعبير دائما . ومع ذلك، لا يزال Access يقيم كلا من خيارات الإخراج ويعامل الإخراج على أنه رقمي أو Null.

في ما يلي كيفية استخدام هذا التعبير في مثال العمل لدينا:


SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

لا تحتاج إلى تعديل الاستعلام الثاني.

في حالة التبديل إلى طريقة عرض ورقة البيانات، ستظهر الآن النتيجة المطلوبة:

معرّف المنتج تاريخ الطلب اسم الشركة المعاملات شراء بيع
74 2006/1/22 مورّد ب شراء 20
77 2006/1/22 مورّد ب شراء 60
80 2006/1/22 المورّد د شراء 75
81 2006/1/22 مورد أ شراء 125
81 2006/1/22 مورد أ شراء 200
7 2006/1/20 الشركة د بيع 10
51 2006/1/20 الشركة د بيع 10
80 2006/1/20 الشركة د بيع 10
34 2006/1/15 الشركة أأ بيع 100
80 2006/1/15 الشركة أأ بيع 30

أحد الأساليب البديلة لتحقيق النتيجة نفسها تتمثل في إضافة الاستعلامات في الاستعلام الموحد مع استعلام آخر:

SELECT
  0 As [Product ID], Date() As [Order Date],
  "" As [Company Name], "" As [Transaction],
  0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

بالنسبة لكل حقل، يعرض Access القيم الثابتة من نوع البيانات الذي تحدده. وبطبيعة الحال، فأنت لا ترغب في أن يتداخل إخراج هذا الاستعلام مع النتائج لذا تتمثل المهارة لتجنب ذلك في تضمين عبارة "WHERE" إلى "False":

WHERE False

هذه خدعة صغيرة لأن الشرط دائما خطأ، لا يرجع الاستعلام أي شيء. يمكنك دمج هذه العبارة مع SQL الموجود وسنصل إلى عبارة مكتملة كما يلي:

SELECT
  0 As [Product ID], Date() As [Order Date],
  "" As [Company Name], "" As [Transaction],
  0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

UNION

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

ملاحظة

في هذا المثال، يقوم الاستعلام المدمج في قاعدة بيانات Northwind بإرجاع 100 سجل، بينما يقوم الاستعلامان الفرديان بإرجاع 58 و43 سجلا لإجمالي 101 سجل. يحدث هذا الاختلاف لأن سجلين غير فريدين. راجع العمل مع السجلات المميزة في استعلامات الاتحاد باستخدام UNION ALL لمعرفة كيفية حل هذا السيناريو باستخدام UNION ALL.

إضافة الإجماليات في استعلام موحد

الاستخدام الخاص لاستعلام موحد هو دمج مجموعة من السجلات مع سجل واحد يحتوي على مجموع حقل واحد أو أكثر.

إليك مثال آخر يمكنك إنشاؤه في قاعدة بيانات نموذج Northwind لتوضيح كيفية الحصول على إجمالي في استعلام موحد.

  1. قم بإنشاء استعلام جديد بسيط لعرض شراء المشروبات (معرّف المنتج= 34 في قاعدة بيانات Northwind) باستخدام بناء جملة SQL التالي:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
    
  2. قم بالتبديل إلى طريقة عرض ورقة البيانات وستظهر عمليات الشراء الأربعة:

    تاريخ الاستلام الكمية
    2006/1/22 100
    2006/1/22 60
    ‏4/4/‏2006‏ 50
    ‏4/5/‏2006‏ 300
  3. للحصول على الإجمالي، قم بإنشاء استعلام تجميع بسيط باستخدام SQL التالي:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
  4. قم بالتبديل إلى طريقة عرض ورقة البيانات وسيظهر سجل واحد فقط:

    تاريخ استلام الحد الأقصى مجموع الكمية
    ‏4/5/‏2006‏ 510
  5. ادمج هذين الاستعلامين في استعلام موحد لإلحاق السجل بإجمالي الكمية لسجلات الشراء:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    UNION
    
    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
    
  6. قم بالتبديل إلى طريقة عرض ورقة البيانات وستظهر لك عمليات الشراء الأربعة مع مجموع كل عملية متبوعة بسجل يحسب إجمالي الكمية:

    تاريخ الاستلام الكمية
    2006/1/22 60
    2006/1/22 100
    ‏4/4/‏2006‏ 50
    ‏4/5/‏2006‏ 300
    ‏4/5/‏2006‏ 510

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

العمل باستخدام سجلات مميزة في الاستعلامات الموحدة باستخدام "UNION ALL"

تتضمن الاستعلامات الموحدة في Access بشكل افتراضي سجلات مميزة فقط. ولكن ماذا لو كنت تريد تضمين جميع السجلات؟ قد يكون هناك مثال آخر مفيد هنا.

في المقطع السابق، وضحنا لك كيفية إنشاء إجمالي في استعلام موحد. قم بتعديل هذا الاستعلام SQL الموحد لتضمين Product ID = 48:


SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION

SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Purchase Order Details].[Date Received];

قم بالتبديل إلى طريقة عرض ورقة البيانات وستظهر لك نتيجة مضللة إلى حد ما:

تاريخ الاستلام الكمية
2006/1/22 100
2006/1/22 200

بطبيعة الحال، لا يرجع سجل واحد ضعف إجمالي الكمية.

ترى هذه النتيجة لأنه في يوم واحد، تم بيع نفس كمية الشوكولاتة مرتين، كما هو مسجل في جدول تفاصيل أمر الشراء. فيما يلي نتيجة استعلام تحديد بسيط يعرض كل من السجلين في قاعدة بيانات نموذج Northwind:

معرف طلب الشراء المنتج الكمية
100 Northwind Traders Chocolate 100
92 Northwind Traders Chocolate 100

في الاستعلام الموحد المذكور سابقا، يمكنك أن ترى أن حقل معرف أمر الشراء غير مضمن وأن الحقلين لا تشكلان سجلين مميزين.

إذا كنت تريد تضمين جميع السجلات، فاستخدم UNION ALL بدلا من UNION في SQL. من المرجح أن يؤثر هذا على فرز النتائج، لذلك قد تحتاج أيضا إلى تضمين عبارة ORDER BY لتحديد ترتيب فرز. إليك التعديل SQL استنادا إلى المثال السابق:


SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION ALL

SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Total];

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

تاريخ الاستلام الإجمالي الكمية
2006/1/22 100
2006/1/22 100
2006/1/22 الإجمالي 200

استخدام استعلام موحد لتصفية السجلات في نموذج من خلال عنصر تحكم مربع تحرير وسرد

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

للاطلاع على كيفية عمل ذلك، إليك مثال آخر يمكنك إنشاؤه في قاعدة بيانات نموذج Northwind لتوضيح هذا السيناريو.

  1. إنشاء استعلام تحديد بسيط باستخدام بناء الجملة هذا SQL :

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
    
  2. قم بالتبديل إلى طريقة عرض ورقة البيانات وستظهر النتائج التالية:

    المدينة عامل التصفية
    مكة مكة
    الرياض الرياض
    المنامة المنامة
    الدوحة الدوحة
    مكة مكة
    المنامة المنامة
    مكة مكة
    المنامة المنامة
    مكة مكة
  3. بالنظر إلى هذه النتائج، قد لا ترى الكثير من القيم. قم بتوسيع الاستعلام، على الرغم من ذلك، وتحويله إلى استعلام موحد باستخدام ما يلي SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
    
  4. قم بالتبديل إلى طريقة عرض ورقة البيانات وستظهر النتائج التالية:

    المدينة عامل التصفية
    <الكل> *
    الرياض الرياض
    الدوحة الدوحة
    المنامة المنامة
    مكة مكة

    ينفذ Access اتحادا للسجلات التسعة، المعروضة سابقا، مع قيم حقول ثابتة من <الكل> و"*". نظرا لأن عبارة الاتحاد هذه لا تحتوي على UNION ALL، يقوم Access بإرجاع سجلات مميزة فقط. وهذا يعني أن كل مدينة يتم إرجاعها مرة واحدة فقط بقيم متطابقة ثابتة.

  5. الآن وبعد أن يصبح لديك استعلام موحد مكتمل يعرض اسم كل مدينة مرة واحدة فقط، بالإضافة إلى خيار يحدد جميع المدن بشكل فعالة، يمكنك استخدام هذا الاستعلام كمصدر سجل لمربع تحرير وسرد في نموذج. باستخدام هذا المثال المحدد كنموذج، يمكنك إنشاء عنصر تحكم مربع تحرير وسرد في نموذج وتعيين هذا الاستعلام كمصدر سجل له وتعيين الخاصية "عرض العمود" لعمود "التصفية" إلى 0 (صفر) لإخفائه بشكل مرئي، ثم تعيين الخاصية "عمود منضم" إلى 1 للإشارة إلى فهرس العمود الثاني. Filter في خاصية النموذج نفسه، يمكنك بعد ذلك إضافة تعليمات برمجية مثل ما يلي لتنشيط عامل تصفية نموذج باستخدام القيمة المحددة في عنصر تحكم مربع التحرير والسرد:

    Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'"
    Me.FilterOn = True
    

    يمكن لمستخدم النموذج بعد ذلك تصفية سجلات النموذج إلى اسم مدينة معين أو تحديد <الكل> لسرد كافة السجلات لجميع المدن.

أعلى الصفحة