Просмотр объединенных результатов нескольких запросов с помощью запроса на объединение

Просмотр объединенных результатов нескольких запросов с помощью запроса на объединение

Примечание:  Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке) .

Иногда может потребоваться список записей из одной таблицы или запроса с записями из одного или нескольких других таблиц для формирования набора записей — список, содержащий все записи из двух или нескольких таблиц. Для этого используется запрос на объединение в Access.

Чтобы понять, эффективно запросы на объединение, сначала необходимо ознакомиться с разработкой основные запросов на выборку в Access. Дополнительные сведения о создании запросов на выборку читайте в статье Создание простого запроса на выборку.

Примечание: Содержимое в этой статье предназначена для баз данных Access на компьютере. Нельзя создавать или с помощью запроса в веб-базы данных Access или веб-приложения Access.

Изучите практический пример запроса на объединение

Если вы никогда не создали перед запроса на объединение, бывает полезно первой исследования практический пример в шаблоне данных "Борей" доступ. Вы можете искать образца данных Northwind шаблона на странице Приступая к работе получение доступа с помощью команды файл > Создать или вы можете непосредственно загрузить копию по следующему адресу: шаблон образца данных 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 являются по существу два запроса select. Эти запросы извлечь две разные наборы записей; один из таблицы Orders продукта и один из таблицы Закупок продукта .

Во второй части этой инструкции SQL является ключевое слово UNION , которое сообщает Microsoft Access, в том, что этот запрос объединит эти два набора записей.

В заключительной части этой инструкции SQL определяет порядок объединенных записей с помощью оператора ORDER BY . В этом примере Access будут отсортированы все записи, в поле Дата заказа в порядке убывания.

Примечание: Запросы на объединение всегда доступны только для чтения в Access; не удается изменить все значения в режиме таблицы.

Создание запроса на объединение путем создания и объединения запросов на выборку

Несмотря на то, что можно создать запрос на объединение написав непосредственно синтаксис SQL в режиме SQL, может оказаться проще создавать в частей с помощью запросов на выборку. Можно скопировать и вставить элементы SQL в итоговый запрос на объединение.

Если вы хотите пропустить чтения шаги и вместо Посмотрите пример, смотрите следующий раздел, Посмотрите пример построения запроса на объединение.

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

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

  3. Закройте диалоговое окно Добавление таблицы.

  4. В окне конструктора запросов дважды щелкните каждое из полей, которые вы хотите включить. Как выбрать поля, убедитесь, что добавить одно и то же количество полей, в том же порядке, добавить другие запросы на выборку. Оплата особого внимания к типы данных из полей и убедитесь в том, что они имеют совместимые типы данных с полями в той же позиции в запросах, которые объединения. Например если первая выборку содержит пять полей, первый из которых содержит данные, даты и времени, убедитесь в том, что каждый из других запросов на выборку, которые группировании имеет пять полей, первый из которых содержит данные, даты и времени, и так далее.

  5. При желании можно добавьте условия в поля, введя соответствующие выражения в строке условия сетки поля.

  6. После добавления полей и условия отбора полей необходимо выполнить запрос на выборку и проверьте его вывод. На вкладке " Конструктор " в группе Результаты нажмите кнопку выполнить.

  7. Переключите запрос в конструктор.

  8. Сохраните запрос на выборку и не закрывайте его.

  9. Повторите эту процедуру для всех запросов на выборку, которые необходимо объединить.

Теперь, когда вы создали запросы на выборку, пора их объединение. В этом шаге создайте запрос на объединение, скопировав и вставив инструкции SQL.

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  2. Закройте диалоговое окно Добавление таблицы.

  3. На вкладке " Конструктор " в группе запросы нажмите кнопку Объединение. Access скрывает окно конструктора запроса и вкладка "Вид" объекта SQL. На этом этапе вкладка объекта SQL представление пусто.

  4. Щелкните вкладку первого запроса на выборку, который необходимо добавить в запрос на объединение.

  5. На вкладке " Главная " выберите Вид > Режим SQL.

  6. Копирование инструкции SQL для запроса на выборку. Перейдите на вкладку для запроса на объединение работы для создания более ранней версии.

  7. Вставьте инструкцию SQL для запроса на выборку на вкладку объекта в режиме SQL.

  8. Удалите точку с запятой (;) в конце инструкции SQL для запроса на выборку.

  9. Нажмите клавишу ВВОД, чтобы переместить курсор вниз на одну строку, а затем введите в новой строке слово UNION.

  10. Щелкните вкладку следующего запроса на выборку, который необходимо добавить в запрос на объединение.

  11. Повторите действия 5—10, пока не будут скопированы и вставлены все инструкции SQL для запросов на выборку в окне режима SQL запроса на объединение. Не удаляйте точку с запятой и не вводите ничего после инструкции SQL в последнем запросе на выборку.

  12. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Результаты запроса на объединение отображаются в режиме таблицы.

Посмотрите пример построения запроса на объединение

Вот пример, в котором можно воссоздать образца базы данных "Борей". Запрос на объединение собирает имена людей из таблицы « Клиенты » и их в сочетании с именами людей из таблицы « Поставщики ». Если вы хотели бы следить за ходом обсуждения, работают эти шаги в копии образца базы данных "Борей".

Создание запроса на объединение в шаблоне Access образца данных Northwind Visual пример.

Ниже приведены действия, необходимые для построения в этом примере:

  1. Создайте две запросов на выборку под названием Query1 и Query2 с таблицами клиентов и продуктов, соответственно, в качестве источников данных. С помощью полей имени и фамилии, как отображать значения.

  2. Создайте новый запрос, изначально под названием Query3 без источника данных и нажмите кнопку Объединение команду на вкладке " Конструктор ", чтобы сделать этот запрос в запросе на объединение.

  3. Копирование и вставка из Query1 и Query2 инструкции 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 словом дополнительных ОБЪЕДИНЕНИЕ следующим образом:

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

Стюарт

Клиента

Goldschmidt

Дэниел

Клиента

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

Jonas

Внутренние

Белякова

Дарья

Поставщика

Hernandez Echevarria

Amaya

Клиента

Mortensen

Свен

Поставщика

Sandberg

Майкл

Поставщика

Кузьмина

Мария

Внутренние

Белых

Николай

Поставщика

Weiler

Cornelia

Внутренние

Воронков

Иван

Если запросы на объединение очень различаются, могут возникнуть ситуации, где поле «Выход» необходимо объединить данные из различных типов данных. Таким образом, запрос на объединение чаще всего возвращает ли результат как тип данных текст так как этот тип данных может содержать текст и номера.

Чтобы понять, как это работает, будет использоваться в запросе на объединение Транзакций продукта в образце базы данных "Борей". Откройте образец базы данных, а затем откройте транзакций продукта запрос в режиме таблицы. Последние 10 записей должно быть аналогичным эти выходные данные:

Код товара

Дата заказа

Название организации

Транзакция

Количество

77

1/22/2006 г.

Поставщик Б

Покупка

60

80

1/22/2006 г.

Поставщик Г

Покупка

75

81

1/22/2006 г.

Поставщик А

Покупка

125

81

1/22/2006 г.

Поставщик А

Покупка

200

7

1/20/2006 г.

Компания D

Продажа

10

51

1/20/2006 г.

Компания D

Продажа

10

80

1/20/2006 г.

Компания D

Продажа

10

34

1/15/2006 г.

Компания AA

Продажа

100

80

1/15/2006 г.

Компания AA

Продажа

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; 

Если переключиться в режим таблицы, вы увидите последние 10 записей, теперь отображаются следующим образом:

Код товара

Дата заказа

Название организации

Транзакция

Приобретение

Продажа

74

1/22/2006 г.

Поставщик Б

Покупка

20

0

77

1/22/2006 г.

Поставщик Б

Покупка

60

0

80

1/22/2006 г.

Поставщик Г

Покупка

75

0

81

1/22/2006 г.

Поставщик А

Покупка

125

0

81

1/22/2006 г.

Поставщик А

Покупка

200

0

7

1/20/2006 г.

Компания D

Продажа

0

10

51

1/20/2006 г.

Компания D

Продажа

0

10

80

1/20/2006 г.

Компания D

Продажа

0

10

34

1/15/2006 г.

Компания AA

Продажа

0

100

80

1/15/2006 г.

Компания AA

Продажа

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

1/22/2006 г.

Поставщик Б

Покупка

77

1/22/2006 г.

Поставщик Б

Покупка

80

1/22/2006 г.

Поставщик Г

Покупка

81

1/22/2006 г.

Поставщик А

Покупка

81

1/22/2006 г.

Поставщик А

Покупка

7

1/20/2006 г.

Компания D

Продажа

10

51

1/20/2006 г.

Компания D

Продажа

10

80

1/20/2006 г.

Компания D

Продажа

10

34

1/15/2006 г.

Компания AA

Продажа

100

80

1/15/2006 г.

Компания AA

Продажа

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;

При переходе к режиму таблицы, вы увидите, что доступ извлекает значения купить, но он значения преобразуются в текст. Чтобы узнать, что они текстовых значений, поскольку они являются по левому краю в режиме таблицы. Пустая строка в первом запросе не является числом, поэтому вы видите эти результаты. Кроме того, что значения Продажа также преобразуются в текст так, как приобрести записи содержат пустую строку.

Код товара

Дата заказа

Название организации

Транзакция

Приобретение

Продажа

74

1/22/2006 г.

Поставщик Б

Покупка

20

77

1/22/2006 г.

Поставщик Б

Покупка

60

80

1/22/2006 г.

Поставщик Г

Покупка

75

81

1/22/2006 г.

Поставщик А

Покупка

125

81

1/22/2006 г.

Поставщик А

Покупка

200

7

1/20/2006 г.

Компания D

Продажа

10

51

1/20/2006 г.

Компания D

Продажа

10

80

1/20/2006 г.

Компания D

Продажа

10

34

1/15/2006 г.

Компания AA

Продажа

100

80

1/15/2006 г.

Компания AA

Продажа

30

Так как решать этой головоломка?

Чтобы решить, принудительно запроса следует ожидать значение в поле быть число. С выражением, которое можно сделать:

IIf(False, 0, Null)

Условие, которое требуется проверить, значение False, никогда не будет иметь значение ИСТИНА, тем самым выражение всегда возвращает значение 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

1/22/2006 г.

Поставщик Б

Покупка

20

77

1/22/2006 г.

Поставщик Б

Покупка

60

80

1/22/2006 г.

Поставщик Г

Покупка

75

81

1/22/2006 г.

Поставщик А

Покупка

125

81

1/22/2006 г.

Поставщик А

Покупка

200

7

1/20/2006 г.

Компания D

Продажа

10

51

1/20/2006 г.

Компания D

Продажа

10

80

1/20/2006 г.

Компания D

Продажа

10

34

1/15/2006 г.

Компания AA

Продажа

100

80

1/15/2006 г.

Компания AA

Продажа

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;

Примечание: Итоговый запрос здесь в данном примере используется база данных Northwind возвращает 100 записей во время две отдельные запросы возвращают 58 и 43 записи показатель 101 записей. Для этого несоответствия, так как две записи не являются уникальными. В разделе, Работа с отдельных записей с помощью ОБЪЕДИНЕНИЕ всех запросов на объединение, чтобы узнать, как решать этот сценарий с помощью UNION ALL.

Для объединения набора записей с одну запись, которая содержит общую сумму одно или несколько полей является особым для запроса на объединение.

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

  1. Создайте новый простой запрос для просмотра покупки beers (код товара = 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. Переход к таблице представления и увидеть четыре покупок:

    Дата получения

    Количество

    1/22/2006 г.

    100

    1/22/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. Переход к таблице представления и увидеть четыре закупки с функцией сумм каждого следуют запись, которая суммирует количество:

    Дата получения

    Количество

    1/22/2006 г.

    60

    1/22/2006 г.

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

Переключить режим таблицы представления и увидеть результат ввести в заблуждение:

Дата получения

Количество

1/22/2006 г.

100

1/22/2006 г.

200

Конечно же одну запись не возвращает два раза количество в целом.

Появится результат, так как на один день то же количество конфет был продан дважды — как записать в таблице детали заказа на покупку. Вот результат простого запроса на выборку, отображающее обе записи в образце базы данных "Борей".

Код заказа на покупку

Product

Quantity

100

Шоколад

100

92

Шоколад

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

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

Дата получения

Итог

Количество

1/22/2006 г.

100

1/22/2006 г.

100

1/22/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 выполняет объединение девять записей, ранее виден значениями поля fixed < все > и «*».

    Так как это объединение предложение не содержит UNION ALL, Access возвращает только отдельных записей означает каждого города с одинаковыми значениями, основных возвращаются только один раз.

  5. Теперь, когда у вас есть завершенных запроса на объединение отображение название каждого города только один раз, вместе с один из вариантов, эффективно выбирает все городов, этот запрос можно использовать как источник записей для поля со списком в форме. С помощью этой конкретный пример как модель, можно создать поле со списком в форме, выберите этот запрос в качестве источника записей, присвойте свойству ширины столбца в столбце Фильтр значение 0 (ноль), чтобы скрыть ее визуально и свойству связанный столбец 1, чтобы указать индекс Во втором столбце. В поле свойства фильтр в саму форму затем можно добавить в коде, например следующие действия, чтобы активировать фильтра формы с помощью что был выбран в поле со списком значение:

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

    Пользователь формы можно затем отбор записей формы в конкретном городе имя или выберите < все > список всех записей для всех городов.

К началу страницы

Совершенствование навыков работы с Office
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединиться к программе предварительной оценки Office

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×