Използване на заявка за обединение, за да се комбинират няколко заявки в една

Използване на заявка за обединение, за да се комбинират няколко заявки в една

Забележка:  Бихме искали да ви осигурим най-новото помощно съдържание възможно най-бързо на вашия собствен език. Тази страница е преведена чрез автоматизация и може да съдържа граматически грешки и несъответствия. Нашата цел е това съдържание да ви бъде полезно. Можете ли да ни кажете дали информацията е била полезна за вас, в дъното на тази страница? Ето статията на английски за бърза справка.

Понякога може да искате да списък на записи от една таблица или заявка с тези от една или повече други таблици да формират един набор от записи – списък с всички записи от две или повече таблици. Това е предназначението на заявка за обединение в Access.

За да разберете ефективно заявки за обединение, първо трябва да са запознати с проектирането на основни заявки за избиране в Access. За да научите повече за проектиране на заявки за избиране, вижте Създаване на проста заявка за избиране.

Забележка: Съдържанието в тази статия е предназначена за използване с настолни бази данни на Access. Не можете да създадете или да използвате заявка за обединение в Access уеб бази данни или уеб приложения на Access.

Проучване на работен пример за заявка за обединение

Ако никога не сте създали заявка за обединение преди, може да ви е полезно да първото проучване работа например в шаблон на Northwind достъп. Можете да търсите Northwind Примерният шаблон на страницата първи стъпки на Access, като щракнете върху файл > Създай или можете директно да изтеглите копие от това местоположение: Northwind примерен шаблон.

След като Access отваря база данни Northwind, отхвърли формуляра на диалоговия прозорец за влизане, който се появява и след това разгънете навигационния екран. Щракнете върху горната част на навигационния екран и след това изберете Тип на обект , за да организирате всички обекти на база данни по техния тип. След това разгънете групата заявки и ще видите заявка, наречена Транзакции на продукти.

Заявки за обединение са лесно да се различава от други обекти на заявка, защото те имат специална икона, която наподобява две взаимосвързани кръгове, представляващи обединена набор от два набора:

Екранна снимка на икона на заявка за обединение в Access.

За разлика от нормален избор и заявки за действие не са свързани таблици в заявка за обединение, което означава, че Access графика Конструкторът не може да се използват за създаване или редактиране на заявки за обединение. Ще опита това, ако отворите заявка за обединение от навигационния екран; Access отваря го и покажете резултатите в табличен изглед. Под командата изгледи в раздела " Начало " ще забележите, че Изглед за проектиране не е налична, когато работите със заявки за обединение. Можете само да превключвате между Изглед на лист с данни и Изглед за SQL , когато работите със заявки за обединение.

За да продължите проучването си на този пример за заявка за обединение, щракнете върху Начало > изглед > SQL изглед , за да прегледате синтаксиса на SQL, който определя го. В тази илюстрация добавихме някои допълнителни интервали в SQL така че да можете лесно да видите различни части, които съставят заявка за обединение.

Визуална пример за заявка за обединение в изглед на SQL от Northwind примерен шаблон за Access.

Нека проучване 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 команда е съюз ключова дума, която разказва достъп, че тази заявка ще комбинира тези два набора от записи.

Последната част от тази 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. Натиснете Enter, за да преместите курсора един ред надолу и след това въведете UNION на новия ред.

  10. Щракнете върху раздела за следващата заявка за избиране, която искате да комбинирате в заявка за обединение.

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

  12. В раздела Структура, в групата Резултати щракнете върху Изпълни.

Резултатите от вашата заявка за обединение се показват в изглед на лист с данни.

Гледайте пример за изграждане на заявка за обединение

Ето един пример, който можете да създадете отново в примерната база данни Northwind. Тази заявка за обединение събира на имената на хората от таблица " клиенти " и ги комбинира с имена на хора от таблицата доставчици . Ако искате да следват заедно, преминете през стъпките в своето копие на примерната база данни Northwind.

Визуална пример за изграждане на заявка за обединение в Northwind примерен шаблон на Access.

Ето стъпките, необходими за изграждане на този пример:

  1. Създайте две заявки за избиране, наречен Query1 и Query2 с клиенти и продукти таблици съответно като източници на данни. Използвайте собствено име и фамилно име полета при показване на стойности.

  2. Създаване на нова заявка, наречен Query3 с източника на данни, няма първоначално и след това щракнете върху обединение команда в раздела проектиране , за да направите тази заявка в заявка за обединение.

  3. Копирайте и поставете SQL отчети от Query1 и Query2 в 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 от други обекти на заявка. Всяка заявка може да бъде много по-сложен от примери за прости заявки за избиране, използвани тук. Може да се възползвате ви да създавате и тествате всяка заявка внимателно, преди да ги комбинирате в заявка за обединение. Ако заявката за обединение не успее да се изпълнява, можете да регулирате всяка заявка поотделно, докато не е успешна и след това възстанови вашата заявка за обединение с коригираната синтаксис.

Прегледайте останалите части от тази статия, за да научите повече съвети и трикове за използването на заявки за обединение.

В посочения пример от предишния раздел, използването на базата данни 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

Милена

Вътрешнофирмени

Джусани

Иван

Доставчик

Glasson

Стюарт

Клиент

Голдшмит

Различна

Клиент

GRATACOS картата

Антонио

Заявката по-горе може да се намали още повече, тъй като достъп само чете имената на изходните полета от първата заявка в заявка за обединение. Тук можете да видите сме премахнали изход от второ и трето заявка секции:

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

Превключване към листа с данни изглед и ще видите резултатите, подобно на това:

Заетост

Фамилно име

Собствено име

Доставчик

Андерсен

Петър отговори.

Вътрешнофирмени

Freehafer

Милена

Клиент

Hasselberg

Петър

Вътрешнофирмени

Hellung крушка

Вяра

Доставчик

Петър Ечевариа

Amaya

Клиент

Мортенсен

Свен

Доставчик

Сандберг

Любов

Доставчик

Банков

Мартин

Вътрешнофирмени

Торп

Петър

Доставчик

Weiler

Корнелия

Вътрешнофирмени

Заре

Костадин

Ако заявки към съюз са много различни, можете да попаднете ситуация, където изхода поле трябва да комбинирате данни от различни типове данни. Ако така, заявката за обединение най-често ще върне резултатите като текст за данни въведете от този тип данни може да побере и двете текст и числа.

За да разберете как действа, ще използваме Продукт транзакции заявката за обединение в примерната база данни Northwind. Отворете тази примерна база данни и след това отворете продукт транзакции заявката в изглед на лист с данни. Последните десет записи трябва да бъде подобен на този изход:

ИД на продукт

Дата на поръчка

Име на фирма

Транзакция

Количество

77

1/22/2006

Доставчик B

Покупка

60

80

1/22/2006

Доставчикът D

Покупка

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

Фирма ε

Прод

100

80

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

1/22/2006

Доставчик B

Покупка

20

0

77

1/22/2006

Доставчик B

Покупка

60

0

80

1/22/2006

Доставчикът D

Покупка

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

Фирма ε

Прод

0

100

80

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

1/22/2006

Доставчик B

Покупка

77

1/22/2006

Доставчик B

Покупка

80

1/22/2006

Доставчикът D

Покупка

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

Фирма ε

Прод

100

80

1/15/2006

Фирма ε

Прод

30

Причината, това се случва е достъп определя типовете данни на полета от първата заявка. В този пример 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

1/22/2006

Доставчик B

Покупка

20

77

1/22/2006

Доставчик B

Покупка

60

80

1/22/2006

Доставчикът D

Покупка

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

Фирма ε

Прод

100

80

1/15/2006

Фирма ε

Прод

30

И така, как разрешавате този Логически?

Решение е да накарате заявката да очаква стойността на полето, за да бъде число. Това може да се направи с израза:

IIf(False, 0, Null)

Състояние, за да проверите, False, никога няма да бъде истина, следователно изразът винаги ще се връща 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

1/22/2006

Доставчик B

Покупка

20

77

1/22/2006

Доставчик B

Покупка

60

80

1/22/2006

Доставчикът D

Покупка

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

Фирма ε

Прод

100

80

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

Това е малко номерът, тъй като това винаги е 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 записи. Причината за това несъответствие е, два записа не са уникални. Вижте раздела работа с отделни записи в чрез съюз всички заявки за обединение, за да научите как да решите този сценарий с помощта на всички съюз.

Специален случай за заявка за обединение е да комбинирате набор от записи с един запис, който съдържа сумата на едно или повече полета.

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

    Датата, получена

    Количество

    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

Един запис разбира се не връща два пъти количеството в общата сума.

Причината виждате този резултат е, че в един ден същото количество шоколади се продава два пъти - както е записано в таблицата по-подробна информация за поръчката за покупка. Ето резултата прости заявки за избиране, показваща и двата записа в примерната база данни Northwind:

ИД на поръчка за покупка

Продукт

Количество

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

Превключване към листа с данни изглед и трябва да видите всички подробности в допълнение към общо като последния запис:

Датата, получена

Обща сума

Количество

1/22/2006

100

1/22/2006

100

1/22/2006

Общо

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 извършва обединение на девет записите, преди това е показано с фиксиран поле стойности на < > и "*".

    Тъй като обединение тази клауза не съдържа всички съюз, Access връща само отделни записи което означава, че всеки град се връща само веднъж с фиксирани еднакви стойности.

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

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

    Потребителят на формуляра да след това филтриране на записи за формуляр към конкретен град име или изберете < всички > списък на всички записи за всички градове.

Най-горе на страницата

Разширете уменията си в Office
Преглед на обучението
Получавайте първи новите функции
Присъединете се към участниците в Office Insider

Беше ли полезна тази информация?

Благодарим ви за обратната връзка!

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×