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

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

Примітка.:  Ми хочемо надавати найновіший вміст довідки рідною мовою користувачів якомога швидше. Цю сторінку перекладено за допомогою засобу автоматичного перекладу, тому вона може містити смислові, синтаксичні або граматичні помилки. Ми вважаємо, що цей вміст стане вам у пригоді. Повідомте нас, чи була інформація корисною, унизу цієї сторінки. Для зручності цю статтю можна переглянути англійською мовою .

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

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

Примітка.: Вміст у цій статті призначено для використання з настільних баз даних Access. Не вдалося створити або за допомогою запиту на об'єднання у веб-бази даних Access або веб-програмах Access.

Вивчення на практиці запит на об'єднання

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

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

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

Знімок екрана: запит на об'єднання піктограма у програмі Access.

На відміну від звичайний режим і запити на змінення таблиці не пов'язаних у запиті на об'єднання, що означає, що доступ графічний конструктор не можна використовувати для створення або редагування запити на об'єднання. Ви відчуєте це, відкривши запиту на об'єднання в області переходів; Доступ до відкриття її і відобразити результати у вікні табличного подання даних. У розділі команди подання » на вкладці основне ви помітите, що Конструктор недоступна під час роботи з запити на об'єднання. Ви лише можна переключатися між Табличного подання даних або Режим SQL , під час роботи з запити на об'єднання.

Щоб продовжити вивчення у цьому прикладі запит на об'єднання, перейдіть на вкладку основне > подання > Режим SQL , щоб переглянути синтаксис SQL, який визначає її. На цій ілюстрації ми додали деякі додаткові інтервалу в SQL, можна легко переглянути різні частини, які входять до запиту на об'єднання.

Візуальний приклад запиту на об'єднання в режимі SQL із шаблону Access зразок "Борей".

Розглянемо цей запит на об'єднання із бази даних "Борей" докладні відомості про синтаксис SQL:

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 і по суті два вибіркових запитів. Ці запити отримати два різні набори записів; одна з таблиці Orders продукту та один від Придбання товарів таблиці.

На другу частину цей оператор SQL – це ключове слово UNION , яка означає, що цей запит буде поєднувати ці два набори записів.

В заключній частині цей оператор SQL визначає замовлення Комбіновані записів за допомогою ORDER BY положення. У цьому прикладі програма Access буде порядок розташування всіх записів, поле Дата замовлення за спаданням.

Примітка.: Запити на об'єднання завжди доступні лише для читання у програмі Access; не можна змінити будь-які значення у вікні табличного подання даних.

Створення запиту на об'єднання, створення та об'єднання вибіркових запитів

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

Якщо ви хочете пропустити читання кроки та натомість Переглянути приклад, у розділі наступного, перегляньте приклади створення запиту на об'єднання.

  1. На вкладці Створити у групі Запити натисніть кнопку Макет запиту.

  2. У діалоговому вікні Відображення таблиці двічі клацніть таблицю з полями, які потрібно додати. Таблиця додасться до вікна макета запиту.

  3. Закрийте діалогове вікно Відображення таблиці.

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

  5. За необхідності можна додати умови для поля, ввівши відповідні вирази в рядку Критерії сітці полів.

  6. Додавши поля й умови полів, виконайте вибірковий запит і перегляньте його результати. На вкладці Конструктор у групі Результати клацніть команду Запустити.

  7. Відкрийте запит у режимі конструктора.

  8. Збережіть його та залиште відкритим.

  9. Повторіть ці дії для всіх вибіркових запитів, які потрібно поєднати.

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

  1. На вкладці Створити у групі Запити натисніть кнопку Макет запиту.

  2. Закрийте діалогове вікно Відображення таблиці.

  3. На вкладці Конструктор у групі Тип запиту натисніть кнопку об'єднання. Доступ до приховання вікна конструктора запитів і відображається вкладка об'єкта SQL подання. На цьому етапі вкладка об'єкта SQL подання пусте.

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

  5. На вкладці Основне натисніть кнопку Вигляд> Режим SQL.

  6. Копіювання SQL-інструкцію вибіркового запиту. Перейдіть на вкладку для запит на об'єднання, що ви почали створювати раніше.

  7. Вставте скопійовану SQL-інструкцію в запит на об’єднання (вкладка об’єкта в режимі SQL).

  8. Видаліть крапку з комою (;) у кінці SQL-інструкції вибіркового запиту.

  9. Натисніть клавішу Enter, щоб перемістити курсор вниз на один рядок а потім введіть UNION на новий рядок.

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

  11. Повторіть кроки 5–10, доки не вставите всі SQL-інструкції вибіркових запитів у запит на об’єднання (вікно в режимі SQL). В останньому вибірковому запиті не видаляйте крапку з комою та не вводьте жодні додаткові символи після SQL-інструкції.

  12. На вкладці Конструктор у групі Результати натисніть кнопку Запуск.

Результати запиту на об'єднання відображаються у вікні табличного подання даних.

Переглянути приклад створення запиту на об'єднання

Нижче наведено приклад, який можна відтворити зі зразком бази даних "Борей". Цей запит на об'єднання збирає імен користувачів, з таблиці « замовники » та об'єднуються з іменами користувачів, з таблиці постачальників . Якщо ви хочете стежити разом, працюють ці кроки в копії зразок бази даних "Борей".

Візуальний приклад створення запиту на об'єднання шаблон Access зразок "Борей".

Нижче наведено кроки, необхідні для створення у цьому прикладі.

  1. Створення двох вибіркових запитів за назвою Query1 і запитом2 з таблиці клієнтів і продуктів відповідно як джерела даних. За допомогою імені та прізвища у поля для відображення значень.

  2. Створення нового запиту називається Query3 спочатку не джерела даних і натисніть кнопку об'єднання команди на вкладці Конструктор , щоб зробити цей запит в запиті на об'єднання.

  3. Копіювання та вставлення із Query1 та запитом2, інструкцій SQL у Query3. Не забудьте видалити додаткові крапку з комою і додайте ключове слово UNION. Потім можна перевірити результати у вікні табличного подання даних.

  4. Додавання в замовлення застереження в одну запитів а потім вставте речення ORDER BY в запит на об'єднання режим SQL. Зверніть увагу, що у Query3, запит на об'єднання, коли замовлення буде додано, спочатку крапку з комою буде видалено, виберіть ім'я в таблиці з імена полів.

  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 з іншими об'єктами запиту. Кожний запит може бути складніше приклади простий Вибірковий запит, що використовуються тут. Це може бути для вас створення та перевірка кожного запиту уважно перед їх об'єднання до запиту на об'єднання. Якщо не вдалося виконати запит на об'єднання, можна настроїти кожний запит окремо, доки не завершено успішно а потім відновити запит на об'єднання із виправленнями синтаксис.

Перегляньте інші розділи цієї статті, щоб отримати додаткові поради та рекомендації щодо використання запитів на об'єднання.

У наведеному прикладі з попереднім розділом використання бази даних "Борей" поєднуються лише дані із двох таблиць. Проте, можна поєднувати трьома або більше таблиць дуже легко у запиті на об'єднання. Наприклад, будівлі в попередньому прикладі, можна також додати імена працівників результати запиту. Ви можете виконувати це завдання за допомогою додавання третій запиту й об'єднання з попереднього інструкції 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 відобразиться цих п'яти приклад записів:

Зайнятості

Прізвище

Ім’я

Внутрішні

Категорія

Ганна

Внутрішні

Giussani

Лаура

Постачальник

Glasson

Стюарт

Клієнт

Геохімічна

Данило

Клієнт

Gratacos Solsona

Антоніо

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

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];

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

Зайнятості

Прізвище

Ім’я

Постачальник

Андерсен

Єлизавета відповідей.

Внутрішні

Категорія

Ганна

Клієнт

Hasselberg

Йонас

Внутрішні

Hellung Ларсен

Ганна

Постачальник

Ернандес Echevarria

Amaya

Клієнт

Мортенсен

Свен

Постачальник

Гітари Sandberg

Мікаел

Постачальник

Марченко

Леонід

Внутрішні

Торп

Степан

Постачальник

Weiler

Корнелія

Внутрішні

Зорі

Роман

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

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

Ідентифікатор товару

Дата замовлення

Назва компанії

Операція

Кількість

77

22/1/2006

Постачальник B

Придбання

60

80

22/1/2006

Постачальник D

Придбання

75

81

22/1/2006

Постачальник A

Придбання

125

81

22/1/2006

Постачальник A

Придбання

200

7

20/1/2006

Компанія D

Збут

10

51

20/1/2006

Компанія D

Збут

10

80

20/1/2006

Компанія D

Збут

10

34

15/1/2006

АА компанії

Збут

100

80

15/1/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/1/2006

Постачальник B

Придбання

20

0

77

22/1/2006

Постачальник B

Придбання

60

0

80

22/1/2006

Постачальник D

Придбання

75

0

81

22/1/2006

Постачальник A

Придбання

125

0

81

22/1/2006

Постачальник A

Придбання

200

0

7

20/1/2006

Компанія D

Збут

0

10

51

20/1/2006

Компанія D

Збут

0

10

80

20/1/2006

Компанія D

Збут

0

10

34

15/1/2006

АА компанії

Збут

0

100

80

15/1/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/1/2006

Постачальник B

Придбання

77

22/1/2006

Постачальник B

Придбання

80

22/1/2006

Постачальник D

Придбання

81

22/1/2006

Постачальник A

Придбання

81

22/1/2006

Постачальник A

Придбання

7

20/1/2006

Компанія D

Збут

10

51

20/1/2006

Компанія D

Збут

10

80

20/1/2006

Компанія D

Збут

10

34

15/1/2006

АА компанії

Збут

100

80

15/1/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/1/2006

Постачальник B

Придбання

20

77

22/1/2006

Постачальник B

Придбання

60

80

22/1/2006

Постачальник D

Придбання

75

81

22/1/2006

Постачальник A

Придбання

125

81

22/1/2006

Постачальник A

Придбання

200

7

20/1/2006

Компанія D

Збут

10

51

20/1/2006

Компанія D

Збут

10

80

20/1/2006

Компанія D

Збут

10

34

15/1/2006

АА компанії

Збут

100

80

15/1/2006

АА компанії

Збут

30

Отже, як ви вирішити цю головоломку?

Вирішення проблеми – це примусово запиту слід очікувати поле значення числа. Що можна зробити з виразу:

IIf(False, 0, Null)

Умови для перевірки, значення False, ніколи не буде True, таким чином, вираз завжди повертає Null, але доступу й надалі обчислює обидва параметри виводу і вирішує виводу числові або 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/1/2006

Постачальник B

Придбання

20

77

22/1/2006

Постачальник B

Придбання

60

80

22/1/2006

Постачальник D

Придбання

75

81

22/1/2006

Постачальник A

Придбання

125

81

22/1/2006

Постачальник A

Придбання

200

7

20/1/2006

Компанія D

Збут

10

51

20/1/2006

Компанія D

Збут

10

80

20/1/2006

Компанія D

Збут

10

34

15/1/2006

АА компанії

Збут

100

80

15/1/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 значення ХИБНІСТЬ:

WHERE False

Це маленький фокус, оскільки це завжди 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;

Примітка.: Загальний запит тут у цьому прикладі використано базу даних "Борей" повертає 100 записів, у той час як два окремі запити повернути 58 і 43 записи для загальної сукупності 101 записи. Причина цього невідповідність в тому, що два записи не унікальні. Ознайомтеся з розділом, Робота з окремі записи в за допомогою об'єднання всі запити на об'єднання, щоб дізнатися, як це можна зробити цей сценарій за допомогою UNION ALL.

Спеціальний регістр для запиту на об'єднання – це поєднання набір записів за допомогою одного запису, який містить суму одного або кількох полів.

Ось ще один приклад, які можна створити зразком бази даних "Борей" для ілюстрації отримання підсумку у запиті на об'єднання.

  1. Створення нового запиту прості для перегляду придбання пива (Product ID = 34 бази даних "Борей") за допомогою наведений нижче синтаксис 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/1/2006

    100

    22/1/2006

    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. Перехід до даних у табличному поданні подання і ви побачите лише один запис:

    MaxOfDate отримав

    Загальна кількість

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

    Дата отримання

    Кількість

    22/1/2006

    60

    22/1/2006

    100

    4/4/2006

    50

    4 та 5/2006

    300

    4 та 5/2006

    510

Яка охоплює основні відомості про додавання підсумків у запиті на об'єднання. Також можна додати фіксованих значень в обох запити, наприклад "Докладно" і "Загальний" візуально відокремити загальна запис з іншими записами. Ви можете переглядати за допомогою фіксованих значень у розділі об'єднання трьох і більше таблиць або запитів у запиті на об'єднання.

Об'єднання запитів на доступ за замовчуванням включати лише окремі записи. Але що робити, якщо ви хочете, щоб включити всі записи? Інший приклад може бути корисно тут.

В попередньому розділі ми відображались створення підсумку у запиті на об'єднання. Змінити цей запит об'єднання 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/1/2006

100

22/1/2006

200

Один запис звичайно не повертає двічі кількість в цілому.

Причина відобразиться такий результат, оскільки на один день ж кількість цукерок продано двічі - як зазначено в таблиці, відомості про замовлення придбання. Ось простий Вибірковий запит результатів, відображення обидва зі зразком бази даних "Борей".

Придбання Ідентифікатор замовлення

Product

Кількість

100

Northwind Traders шоколад

100

92

Northwind Traders шоколад

100

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

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

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

Дата отримання

Підсумок

Кількість

22/1/2006

100

22/1/2006

100

22/1/2006

Усього

200

Поширені використання запиту на об'єднання – це в якості джерела записів для елемента керування поля зі списком у формі. За допомогою цього поле зі списком виберіть значення для фільтрування записів у формі. Наприклад, фільтрування працівника записи, їхні місто.

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

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

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

    Місто

    Фільтр

    Кривий Ріг

    Кривий Ріг

    Львів

    Львів

    Redmond

    Redmond

    Пі

    Пі

    Кривий Ріг

    Кривий Ріг

    Redmond

    Redmond

    Кривий Ріг

    Кривий Ріг

    Redmond

    Redmond

    Кривий Ріг

    Кривий Ріг

  3. Переглянувши ці результати вам може не відображатися багато значення. Розгортання запит, хоча й перетворення даних відповідно до запиту на об'єднання, використовуючи такі SQL:

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

    Місто

    Фільтр

    < всі >

    *

    Львів

    Львів

    Пі

    Пі

    Redmond

    Redmond

    Кривий Ріг

    Кривий Ріг

    Access здійснює об'єднання дев'ять записів, раніше показано з фіксованими поле значення < всіх > і "*".

    Після того, як об'єднання Речення HAVING не містить UNION ALL, Access повертає лише окремі записи тобто кожного міста повертається лише один раз з фіксованими однаковими значеннями.

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

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

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

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

Удосконалення навичок роботи з Office
Ознайомтеся з навчальними матеріалами
Отримуйте нові функції раніше за інших
Приєднайтеся до оцінювачів Office

Ця інформація корисна?

Дякуємо за ваш відгук!

Дякуємо за відгук! Схоже, вам може стати в нагоді допомога одного з наших спеціалістів служби підтримки Office, з яким ми вас можемо з’єднати.

×