استخدام استعلام موحد لدمج عدة استعلامات في نتيجة واحدة
ينطبق على
Access لـ Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

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

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

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

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

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

لقطة شاشة لأيقونة استعلام موحد في Access.

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

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

لا يدعم المستعرض الخاص بك تشغيل الفيديو. ثبّت Microsoft Silverlight أو Adobe Flash Player أو Internet Explorer 9.

دعونا ندرس بناء جملة 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. في هذه المرحلة، تكون علامة تبويب طريقة عرض SQL الخاصة بالعنصر فارغة.

  3. انقر فوق علامة التبويب الخاصة باستعلام التحديد الأول الذي تريد دمجه في الاستعلام الموحد.

  4. ضمن علامة التبويب الصفحة الرئيسية، انقر فوق عرض > طريقة عرض SQL.

  5. انسخ عبارة SQL الخاصة باستعلام التحديد. انقر فوق علامة التبويب الخاصة بالاستعلام الموحد الذي بدأت في إنشائه مسبقاً.

  6. الصق جملة SQL الخاصة باستعلام التحديد في علامة تبويب كائن طريقة عرض SQL الخاصة باستعلام التوحيد.

  7. احذف الفاصلة المنقوطة (;) الموجودة في نهاية جملة SQL الخاصة باستعلام التحديد.

  8. اضغط على مفتاح الإدخال Enter لنقل المؤشر بمقدار سطر واحد للأسفل، ثم اكتب "UNION" على السطر الجديد.

  9. انقر فوق علامة التبويب الخاصة باستعلام التحديد التالي الذي تريد دمجه باستعلام التوحيد.

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

  11. من علامة التبويب تصميم، في المجموعة النتائج، انقر فوق تشغيل.

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

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

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

لا يدعم المستعرض الخاص بك تشغيل الفيديو. ثبّت Microsoft Silverlight أو Adobe Flash Player أو Internet Explorer 9.

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

  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، صحيحا أبدا، وبالتالي سيرجع التعبير دائما Null، ولكن Access لا يزال يقيم كلا من خيارات الإخراج ويقرر أن يكون الإخراج رقميا أو خاليا.

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

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

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

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

في المقطع السابق، وضحنا لك كيفية إنشاء إجمالي في استعلام موحد. قم بتعديل هذا الاستعلام الموحد الخاص بـ SQL لتضمين "معرّف المنتج"= 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 بإجراء اتحاد للسجلات التسعة، المعروضة سابقا، مع قيم حقول ثابتة <All> و"*".

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

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

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

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

أعلى الصفحة

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.