Об’єднання результатів кількох запитів за допомогою запиту на об’єднання

Застосовується до
Access для Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Іноді може знадобитися об'єднати записи з однієї таблиці або запиту із записами з однієї або кількох інших таблиць в один результат. Ось що робить запит на об'єднання в Access.

Щоб ефективно зрозуміти запити на об'єднання, спочатку слід ознайомитися з розробкою основних вибіркових запитів в Access. Докладні відомості про створення вибіркових запитів див. в статті Створення простого вибіркового запиту.

Вивчення зразка робочого запиту на об’єднання

Якщо ви ніколи раніше не створювали запит на об'єднання, це може допомогти спочатку вивчити робочий приклад у шаблоні Northwind Access. Щоб знайти зразок шаблону Northwind на сторінці початку роботи в Access, натисніть кнопку Створити файл>. Ви також можете завантажити копію безпосередньо зі зразка шаблону Northwind.

Коли Access відкриє базу даних Northwind, закрийте діалогове вікно входу, яке з'явиться, а потім розгорніть область переходів. Виберіть верхню частину області переходів і виберіть тип об'єкта , щоб упорядкувати всі об'єкти бази даних за типом. Потім розгорніть групу Запити , і відобразиться запит Транзакції продукту.

Запити на об’єднання легко відрізнити від інших об’єктів запиту за спеціальною піктограмою, яка нагадує два кола, що перетинаються, символізуючи об’єднання двох наборів даних.

Знімок екрана: піктограма запиту на об'єднання в Access На відміну від звичайних вибіркових і екшн-запитів, таблиці не пов'язані в запиті на об'єднання. Це означає, що ви не можете використовувати графічний конструктор запитів Access для створення або редагування запитів на об'єднання. Якщо відкрити запит на об'єднання з області переходів, програма Access відкриє його та відобразить результати у вікні табличного подання даних. У розділі Подання на вкладці Основне зверніть увагу, що режим конструктора недоступний під час роботи з запитами на об'єднання. Переключатися можна лише в режимі табличного подання даних і режимі SQL.

Щоб продовжити вивчення цього запиту на об'єднання, клацніть Елемент ПоданняSQL Home >Views>, щоб переглянути 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 View, його може бути легше побудувати частинами за допомогою вибіркових запитів. Потім ви зможете скопіювати та вставити частини інструкції SQL в єдиний запит на об’єднання.

Щоб пропустити вказівки й натомість переглянути відеозразок, перейдіть до наступного розділу Приклад створення запиту на об’єднання.

  1. На вкладці Створити у групі Запити натисніть кнопку Макет запиту.
  2. Двічі клацніть таблицю з полями, які потрібно включити. Таблиця додасться до вікна макета запиту.
  3. У вікні макета запиту двічі клацніть кожне з полів, які потрібно включити. Вибравши поля, обов'язково додайте таку саму кількість полів у тому ж порядку, у якому їх додано до інших вибіркових запитів. Уважно зверніть увагу на типи даних полів і переконайтеся, що вони мають сумісні типи даних із полями в одному розташуванні в інших запитах, які ви об'єднуєте. Наприклад, якщо перший вибірковий запит містить п'ять полів, перший із яких містить дані дати й часу, переконайтеся, що кожен інший вибірковий запит, який ви об'єднуєте, також має п'ять полів, перший із яких містить дані дати й часу тощо.
  4. За потреби до полів можна додати умови, ввівши в сітці полів у рядку "Критерії" відповідні вирази.
  5. Додавши поля й умови полів, виконайте вибірковий запит і перегляньте його результати. На вкладці Конструктор у групі Результати клацніть команду Запустити.
  6. Відкрийте запит у режимі конструктора.
  7. Збережіть його та залиште відкритим.
  8. Повторіть ці дії для всіх вибіркових запитів, які потрібно поєднати.

Тепер, коли ви створили вибіркові запити, настав час об'єднати їх. На цьому кроці потрібно створити запит на об'єднання, скопіювавши та вставивши SQL інструкції.

  1. На вкладці Створити в групі Запити натисніть кнопку Конструктор запитів.
  2. На вкладці Конструктор у групі Тип запиту натисніть кнопку Об’єднання. Програма Access приховає вікно макета запиту та відобразить вкладку об'єкта SQL View . На цьому етапі вкладка пуста.
  3. Виберіть вкладку першого вибіркового запису, який потрібно додати до запиту на об’єднання.
  4. На вкладці Основне натисніть кнопку Переглянути>режим SQL.
  5. Скопіюйте інструкцію SQL для вибіркового запиту. Перейдіть на вкладку запиту на об’єднання, який ви почали створювати на кроці 1.
  6. Вставте інструкцію SQL для вибіркового запиту на вкладку об'єкта SQL View запиту на об'єднання.
  7. Видаліть крапку з комою (;) у кінці інструкції вибіркового запиту SQL .
  8. Натисніть клавішу Enter, щоб перемістити курсор на один рядок униз, а потім введіть UNION текст у новому рядку.
  9. Виберіть вкладку наступного вибіркового запиту, який потрібно додати до запиту на об’єднання.
  10. Повторюйте кроки 5–10, доки не скопіюєте та не вставите всі інструкції для вибіркових SQL запитів у вікно sql View запиту на об'єднання. Не видаляйте крапку з комою та не вводьте нічого після 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 View. Однак спосіб копіювання та вставлення інструкцій 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 відображає п’ять зразків записів:

Зайнятість Прізвище Ім’я
Штатний Freehafer Nancy
Штатний Giussani Laura
Постачальник Glasson Stuart
Клієнт Goldschmidt Daniel
Клієнт Gratacos Solsona Antonio

Ви можете ще більше зменшити запит, оскільки Програма 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];

Перейдіть у вікно табличного подання даних, і результати відобразяться в такому вигляді:

Зайнятість Прізвище Ім’я
Постачальник Andersen Elizabeth A.
Штатний Freehafer Nancy
Клієнт Hasselberg Jonas
Штатний Hellung-Larsen Anne
Постачальник Hernandez-Echevarria Amaya
Клієнт Mortensen Sven
Постачальник Sandberg Mikael
Постачальник Марченко Леонід
Штатний Thorpe Steven
Постачальник Weiler Cornelia
Штатний Zare Robert

Змішування типів даних

Якщо об'єднання запитів дуже різне, може виникнути ситуація, коли поле виводу має об'єднувати дані різних типів даних. У такому разі запит на об’єднання найчастіше повертатиме результат у вигляді текстових даних, оскільки цей тип даних може включати як текст, так і числа.

Щоб зрозуміти, як це працює, ми скористаємося запитом на об’єднання Транзакції товару в зразку бази даних Northwind. Відкрийте зразок бази даних, а потім відкрийте запит "Транзакції товару" у вікні табличного подання даних. Ось зразок останніх десяти записів:

Ідентифікатор товару Дата замовлення Назва компанії Транзакція Кількість
77 22.01.2006 Постачальник B Придбати 60
80 22.01.2006 Постачальник D Придбати 75
81 22.01.2006 Постачальник А Придбати 125
81 22.01.2006 Постачальник А Придбати 200
7 20.01.2006 Компанія D Продаж 10
51 20.01.2006 Компанія D Продаж 10
80 20.01.2006 Компанія D Продаж 10
34 15.01.2006 Компанія АА Продаж 100
80 15.01.2006 Компанія АА Продаж 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 22.01.2006 Постачальник B Придбати 20 0
77 22.01.2006 Постачальник B Придбати 60 0
80 22.01.2006 Постачальник D Придбати 75 0
81 22.01.2006 Постачальник А Придбати 125 0
81 22.01.2006 Постачальник А Придбати 200 0
7 20.01.2006 Компанія D Продаж 0 10
51 20.01.2006 Компанія D Продаж 0 10
80 20.01.2006 Компанія D Продаж 0 10
34 15.01.2006 Компанія АА Продаж 0 100
80 15.01.2006 Компанія АА Продаж 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 22.01.2006 Постачальник B Придбати
77 22.01.2006 Постачальник B Придбати
80 22.01.2006 Постачальник D Придбати
81 22.01.2006 Постачальник А Придбати
81 22.01.2006 Постачальник А Придбати
7 20.01.2006 Компанія D Продаж 10
51 20.01.2006 Компанія D Продаж 10
80 20.01.2006 Компанія D Продаж 10
34 15.01.2006 Компанія АА Продаж 100
80 15.01.2006 Компанія АА Продаж 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 22.01.2006 Постачальник B Придбати 20
77 22.01.2006 Постачальник B Придбати 60
80 22.01.2006 Постачальник D Придбати 75
81 22.01.2006 Постачальник А Придбати 125
81 22.01.2006 Постачальник А Придбати 200
7 20.01.2006 Компанія D Продаж 10
51 20.01.2006 Компанія D Продаж 10
80 20.01.2006 Компанія D Продаж 10
34 15.01.2006 Компанія АА Продаж 100
80 15.01.2006 Компанія АА Продаж 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 22.01.2006 Постачальник B Придбати 20
77 22.01.2006 Постачальник B Придбати 60
80 22.01.2006 Постачальник D Придбати 75
81 22.01.2006 Постачальник А Придбати 125
81 22.01.2006 Постачальник А Придбати 200
7 20.01.2006 Компанія D Продаж 10
51 20.01.2006 Компанія D Продаж 10
80 20.01.2006 Компанія D Продаж 10
34 15.01.2006 Компанія АА Продаж 100
80 15.01.2006 Компанія АА Продаж 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. Перейдіть у вікно табличного подання даних, і ви побачите такі чотири записи про придбання:

    Дата отримання Кількість
    22.01.2006 100
    22.01.2006 60
    04.04.2006 50
    05.04.2006 300
  3. Щоб отримати підсумок, створіть простий агрегатний запит, скориставшись цією інструкцією SQL:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
  4. Перейдіть у вікно табличного подання даних, і ви побачите тільки один запис:

    MaxOfDate Received SumOfQuantity
    05.04.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. Перейдіть у вікно табличного подання даних, і ви побачите чотири записи про придбання, після суми кожного з яких буде зазначено загальну кількість.

    Дата отримання Кількість
    22.01.2006 60
    22.01.2006 100
    04.04.2006 50
    05.04.2006 300
    05.04.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];

Перейдіть у вікно табличного подання даних, і ви побачите дещо незрозумілий результат:

Дата отримання Кількість
22.01.2006 100
22.01.2006 200

Звісно, один запис не повертає вдвічі більшу загальну кількість.

Цей результат відображається, оскільки в один день стільки ж шоколаду було продано двічі, як це було записано в таблиці "Відомості про замовлення на придбання". Нижче наведено зразок простого вибіркового запиту, що відображає обидва записи в зразку бази даних Northwind:

Ідентифікатор замовлення на закупівлю Product Кількість
100 Northwind Traders Chocolate 100
92 Northwind Traders Chocolate 100

У попередньому запиті на об'єднання можна побачити, що поле "Ідентифікатор замовлення на придбання" не включено, а два поля не складають два окремі записи.

Якщо потрібно включити всі записи, використовуйте UNION ALL замість UNIONSQL. Це, найімоніше, вплине на сортування результатів, тому також можна додати 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];

Перейдіть у вікно табличного подання даних, і ви побачите всі дані разом із підсумками в останньому записі:

Дата отримання Усього Кількість
22.01.2006 100
22.01.2006 100
22.01.2006 Усього 200

Використання запиту на об’єднання для фільтрування записів форми за допомогою елемента керування "поле зі списком"

Зазвичай запит на об’єднання може слугувати джерелом для елемента керування "поле зі списком" у формі. Ви можете скористатися цим полем зі списком, щоб вибрати значення, за яким потрібно фільтрувати записи форми. Наприклад, можна відфільтрувати записи працівників за містом.

Щоб побачити, як це працює, розгляньмо ще один приклад, який можна відтворити в зразку бази даних Northwind.

  1. Створіть простий вибірковий запит, використовуючи такий SQL синтаксис:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
    
  2. Перейдіть у вікно табличного подання даних, і ви побачите такі результати:

    Місто Фільтр
    Seattle Seattle
    Bellevue Bellevue
    Redmond Redmond
    Kirkland Kirkland
    Seattle Seattle
    Redmond Redmond
    Seattle Seattle
    Redmond Redmond
    Seattle Seattle
  3. Мабуть, ви помітили, що ці результати не надто змістовні. Однак розгорніть запит і перетворіть його на запит на об'єднання, виконавши такі дії SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
    
  4. Перейдіть у вікно табличного подання даних, і ви побачите такі результати:

    Місто Фільтр
    <Усі> *
    Bellevue Bellevue
    Kirkland Kirkland
    Redmond Redmond
    Seattle Seattle

    Access об'єднає дев'ять раніше показаних записів із фіксованими значеннями <полів All> і "*". Оскільки це речення об'єднання не містить UNION ALL, Access повертає лише окремі записи. Це означає, що кожне місто повертається лише один раз з фіксованими однаковими значеннями.

  5. Виконавши запит на об’єднання, що виводить кожну назву міста тільки один раз і дає змогу швидко вибрати всі міста, ви можете скористатися цим запитом як джерелом записів для поля зі списком у формі. Використовуючи цей особливий зразок як модель, можна створити елемент керування "поле зі списком" у формі, установити цей запит його джерелом записів, установити для властивості "Ширина стовпця" стовпця "Фільтр" значення 0 (нуль), щоб приховати його, а потім установити для властивості "Приєднаний стовпець" значення 1, щоб указати індекс другого стовпця. Filter У властивості самої форми можна додати такий код, як наведений нижче, щоб активувати фільтр форми за допомогою значення, вибраного в елементі керування "поле зі списком":

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

    Користувач форми може відфільтрувати записи форми за певною назвою міста або вибрати <пункт Усі> , щоб перерахувати всі записи для всіх міст.

На початок сторінки