Použitie zjednocovacieho dotazu na získanie jedného výsledku z kombinácie viacerých dotazov

Vzťahuje sa na
Access pre Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Niekedy možno budete chcieť skombinovať záznamy z jednej tabuľky alebo dotazu so záznamami z ďalšej alebo viacerých tabuliek do jedného výsledku. Na to slúži zjednocovací dotaz v Accesse.

Ak chcete efektívne porozumieť zjednocovacím dotazom, najskôr by ste sa mali oboznámiť s navrhovaním základných výberových dotazov v Accesse. Ďalšie informácie o navrhovaní výberových dotazov nájdete v téme Vytvorenie jednoduchého výberového dotazu.

Preštudovanie funkčného príkladu zjednocovacieho dotazu

Ak ste nikdy predtým nevytvárali zjednocovacie dotazy, môže byť užitočné najskôr si preštudovať funkčný príklad v accessovej šablóne databázy Northwind. Vzorovú šablónu databázy Northwind môžete vyhľadať na stránke Začíname v Accesse výberom položky Súbor,>Nové. Môžete si tiež stiahnuť kópiu priamo zo vzorovej šablóny databázy Northwind.

Keď Access otvorí databázu Northwind, najskôr sa zobrazí dialógové okno prihlásenia a potom rozbaľte navigačnú tablu. Vyberte hornú časť navigačnej tably a potom položku Typ objektu , čím usporiadate všetky databázové objekty podľa typu. Následne rozbaľte skupinu Dotazy . Zobrazí sa dotaz s názvom Product Transactions.

Zjednocovacie dotazy odlíšite od ostatných dotazov jednoducho, pretože sú označené špeciálnou ikonou, ktorá zobrazuje dva prepletené kruhy reprezentujúce množinu spojenú z dvoch množín:

Snímka obrazovky s ikonou zjednocovacieho dotazu v Accesse. Na rozdiel od bežných výberových a akčných dotazov, tabuľky nie sú spojené v zjednocovacom dotaze. To znamená, že grafického návrhára dotazov programu Access nemožno použiť na vytvorenie alebo úpravu zjednocovacích dotazov. Ak otvoríte zjednocovací dotaz z navigačnej tably, Access ho otvorí a zobrazí výsledky v údajovom zobrazení. Všimnite si, že v časti Zobrazenia na karte Domov nie je návrhové zobrazenie k dispozícii, keď pracujete so zjednocovacími dotazmi. Prepínať môžete len medzi údajovým zobrazením a zobrazením SQL.

Ak chcete pokračovať v študovaní tohto príkladu zjednocovacieho dotazu, kliknite na položkuZobrazenia>Domov>SQL Zobrazenie a zobrazí sa syntax, SQL ktorá ho definuje. Do tohto SQL znázornenia sme pridali medzery navyše, aby ste mohli jednoducho odlíšiť jednotlivé časti, ktoré tvoria zjednocovací dotaz.

Pozrime sa podrobne SQL na syntax tohto zjednocovacieho dotazu z databázy 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;

Prvá a tretia časť tohto príkazu SQL sú v podstate dva výberové dotazy. Tieto dotazy načítajú dve rôzne množiny záznamov. jednu z tabuľky Objednávky produktov a jednu z tabuľky Nákupy produktov .

Druhá časť tohto SQL príkazu UNION je kľúčové slovo, ktoré informuje Access o tom, aby tieto dve množiny záznamov skombinoval.

Posledná časť tohto SQL príkazu určuje poradie kombinovaných záznamov pomocou príkazu ORDER BY . V tomto príklade Access zoradí všetky záznamy podľa poľa Order Date v zostupnom poradí.

Poznámka

Zjednocovacie dotazy v Accesse vždy slúžia iba na čítanie. Nie je možné zmeniť žiadne hodnoty v údajovom zobrazení.

Vytvorenie zjednocovacieho dotazu pomocou vytvorenia a skombinovania výberových dotazov

Napriek tomu, že zjednocovací dotaz môžete vytvoriť napísaním syntaxe SQL priamo v zobrazení SQL, môže byť pre vás jednoduchšie vytvoriť ho po častiach pomocou výberových dotazov. Potom môžete časti syntaxe SQL skopírovať a prilepiť do skombinovaného zjednocovacieho dotazu.

Ak chcete vynechať čítanie postupu a namiesto toho si príklad pozrieť, prejdite do ďalšej časti, Pozrite si príklad vytvorenia zjednocovacieho dotazu.

  1. Na karte Vytvoriť kliknite v skupine Dotazy na položku Návrh dotazu.
  2. Dvakrát kliknite na tabuľku obsahujúcu polia, ktoré chcete zahrnúť. Tabuľka sa pridá do okno návrhu dotazu.
  3. V okne návrhu dotazu dvakrát kliknite na každé z polí, ktoré chcete zahrnúť. Pri výbere polí pridajte rovnaký počet polí a v rovnakom poradí, ako pridávate do ostatných výberových dotazov. Venujte pozornosť typom údajov polí a skontrolujte, či obsahujú kompatibilné typy údajov s poľami v rovnakej pozícii v ostatných dotazoch, ktoré kombinujete. Ak má napríklad prvý výberový dotaz päť polí, z ktorých prvé obsahuje údaje typu dátum a čas, skontrolujte, či každý z ostatných výberových dotazov, ktoré kombinujete, má takisto päť polí, z ktorých prvé obsahuje údaje typu dátum a čas, a tak ďalej.
  4. Voliteľne pridajte do polí kritériá zadaním príslušných výrazov do riadka Kritériá v mriežke poľa.
  5. Po dokončení pridávania polí a kritérií polí by ste mali spustiť výberový dotaz a skontrolovať jeho výstup. Prejdite na kartu Návrh a v skupine Výsledky kliknite na položku Spustiť.
  6. Prepnite dotaz do návrhového zobrazenia.
  7. Uložte výberový dotaz a ponechajte ho otvorený.
  8. Zopakujte tento postup pri každom výberovom dotaze, ktorý chcete skombinovať.

Po vytvorení výberových dotazov ich môžete skombinovať. V tomto kroku vytvoríte zjednocovací dotaz skopírovaním a prilepením príkazov SQL .

  1. Na karte Vytvoriť kliknite v skupine Dotazy na položku Návrh dotazu.
  2. Na karte Návrh kliknite v skupine Dotaz na položku Zjednocovať. Okno návrhu dotazu v Accesse sa skryje a zobrazí sa karta objektu zobrazenia SQL . V tomto bode je karta prázdna.
  3. Kliknite na kartu pre prvý výberový dotaz, ktorý chcete skombinovať v zjednocovacom dotaze.
  4. Na karte Domov kliknite na položku Zobraziť>zobrazenie SQL.
  5. Skopírujte SQL príkaz pre výberový dotaz. Kliknite na kartu pre zjednocovací dotaz, ktorý ste začali vytvárať v predchádzajúcom kroku.
  6. Prilepte SQL príkaz pre výberový dotaz na kartu objektu zobrazenia SQL zjednocovacieho dotazu.
  7. Odstráňte bodkočiarku (;) na konci príkazu dotazu SQL Select.
  8. Stlačením klávesu Enter presuňte kurzor o jeden riadok nadol a potom zadajte text UNION do nového riadka.
  9. Kliknite na kartu pre ďalší výberový dotaz, ktorý chcete skombinovať v zjednocovacom dotaze.
  10. Opakujte kroky 5 až 10, kým neskopírujete a neprilepíte všetky príkazy SQL pre výberové dotazy do okna zobrazenia SQL zjednocovacieho dotazu. Neodstraňujte bodkočiarku ani nezadávajte nič za príkaz pre posledný výberový SQL dotaz.
  11. Prejdite na kartu Návrh a v skupine Výsledky kliknite na položku Spustiť.

Výsledky zjednocovacieho dotazu sa zobrazia v údajovom zobrazení.

Pozrite si príklad vytvorenia zjednocovacieho dotazu

Tu je príklad, ktorý môžete znova vytvoriť vo vzorovej databáze Northwind. Tento zjednocovací dotaz zhromažďuje mená ľudí z tabuľky Customers (Zákazníci) a skombinuje ich s menami ľudí z tabuľky Suppliers (Dodávatelia). Ak chcete pokračovať s nami, postupujte podľa nasledujúcich krokov vo svojej kópii vzorovej databázy Northwind.

Kroky potrebné na vytvorenie tohto príkladu:

  1. Vytvorte dva výberové dotazy s názvom Dotaz1 a Dotaz2, pričom ako zdroje údajov použite tabuľky Customers (Zákazníci) a Suppliers (Dodávatelia). Použite polia First name (Meno) a Last name (Priezvisko) ako zobrazené hodnoty.

  2. Vytvorte nový dotaz s názvom Dotaz3 bez počiatočného zdroja údajov. Ak chcete, aby sa z tohto dotazu stal zjednocovací dotaz, kliknite na príkaz Zjednocovací na karte Návrh.

  3. Skopírujte a prilepte príkazy SQL z Dotazu1 a Dotazu2 do Dotazu3. Uistite sa, že ste odstránili nadbytočné bodkočiarky, a pridajte kľúčové slovo UNION . Potom môžete skontrolovať výsledky v údajovom zobrazení.

  4. Pridajte zoraďovaciu klauzulu do jedného z dotazov a potom prilepte ORDER BY príkaz do zjednocovacieho dotazu v zobrazení SQL. Všimnite si, že pri pridávaní zoradenia v zjednocovacom dotaze (Dotaz3) sa najskôr odstránia bodkočiarky, potom sa odstráni názov tabuľky z názvov polí.

  5. Konečný príklad SQL , v ktorom sa skombinujú a zoradia názvy pre tento príklad zjednocovacieho dotazu, je nasledujúci:

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

Ak dobre rozumiete písaniu SQL syntaxe, môžete vytvoriť vlastný SQL príkaz pre zjednocovací dotaz priamo v zobrazení SQL. Možno však pre vás bude užitočný postup, pri ktorom sa kopírujú a prilepujú príkazy SQL z iných objektov dotazu. Jednotlivé dotazy však môžu byť oveľa zložitejšie ako jednoduché výberové dotazy použité v týchto príkladoch. Určite je užitočné všetky dotazy dôsledne vytvoriť a otestovať, kým ich skombinujete do zjednocovacieho dotazu. Ak sa zjednocovací dotaz nepodarí spustiť, môžete každý dotaz upraviť jednotlivo a potom znova vytvoriť zjednocovací dotaz so správnou syntaxou.

Prezrite si aj zostávajúce časti tohto článku a získajte ďalšie tipy a triky na použitie zjednocovacích dotazov.

Skombinovanie troch alebo viacerých tabuliek či dotazov v zjednocovacom dotaze

V predchádzajúcej časti sú v príklade používajúcom databázu Northwind skombinované údaje len z dvoch tabuliek. V zjednocovacom dotaze však môžete veľmi jednoducho skombinovať aj tri alebo viac tabuliek. V nadväznosti na predchádzajúci príklad možno budete chcieť napríklad do výstupného dotazu zahrnúť aj mená z tabuľky employees(zamestnanci). Dosiahnete to tak, že pridáte tretí dotaz a pomocou ďalšieho kľúčového slova UNION ho skombinujete s predchádzajúcimi príkazmi SQL takto:


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

Keď zobrazíte výsledok v údajovom zobrazení, všetci zamestnanci budú v zozname uvedení spolu so vzorovým názvom spoločnosti, a to zrejme nie je veľmi užitočné. Ak chcete, aby sa v poli zobrazovalo, či je osoba interným zamestnancom (in-house) alebo patrí medzi dodávateľov (supplier) či zákazníkov (customer), môžete namiesto názvu spoločnosti vložiť pevnú hodnotu . Vyzerá to SQL takto:


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

Takto by mali vyzerať výsledky v údajovom zobrazení. Access zobrazí týchto päť vzorových záznamov:

Employment Last Name First Name
In-house Freehafer Nancy
In-house Giussani Laura
Supplier Glasson Stuart
Customer Goldschmidt Daniel
Customer Gratacos Solsona Antonio

Dotaz je možné znížiť ešte viac, pretože Access prečíta názvy výstupných polí len z prvého dotazu v zjednocovacom dotaze. Tu sa odstráni výstup z druhej a tretej časti dotazu:


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

Filtrovanie v zjednocovacích dotazoch

V zjednocovacom dotaze Accessu je možné použiť zoradenie iba raz, ale každý z dotazov môžete filtrovať samostatne. V nadväznosti na zjednocovací dotaz z predchádzajúcej časti je tu uvedený príklad, v ktorom sa každý dotaz filtruje pridaním klauzuly 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];

Prepnite na údajové zobrazenie a uvidíte výsledky podobné týmto:

Employment Last Name First Name
Supplier Andersen Elizabeth A.
In-house Freehafer Nancy
Customer Hasselberg Jonas
In-house Hellung-Larsen Anne
Supplier Hernandez-Echevarria Amaya
Customer Mortensen Sven
Supplier Sandberg Mikael
Supplier Sousa Luis
In-house Thorpe Steven
Supplier Weiler Cornelia
In-house Zare Robert

Miešanie typov údajov

Ak sú zjednocované dotazy veľmi odlišné, môžete sa ocitnúť v situácii, keď musíte vo výstupnom poli skombinovať údaje rozličných typov údajov. Ak to urobíte, zjednocovací dotaz najčastejšie vráti výsledky v podobe typu údajov text, keďže tento typ údajov môže obsiahnuť text aj čísla.

Ak chceme pochopiť, ako to funguje, použijeme zjednocovací dotaz Product Transactions vo vzorovej databáze Northwind. Otvorte túto vzorovú databázu a potom otvorte dotaz Product Transactions v údajovom zobrazení. Posledných desať záznamov by malo sa malo podobať na tento výstup:

Product ID Order Date Company Name Transaction Quantity
77 22.1.2006 Supplier B Purchase 60
80 22.1.2006 Supplier D Purchase 75
81 22.1.2006 Supplier A Purchase 125
81 22.1.2006 Supplier A Purchase 200
7 20.1.2006 Company D Sale 10
51 20.1.2006 Company D Sale 10
80 20.1.2006 Company D Sale 10
34 15.1.2006 Company AA Sale 100
80 15.1.2006 Company AA Sale 30

Povedzme, že chcete rozdeliť pole Množstvo na dve polia: Nákup a Predaj. Povedzme tiež, že chcete mať pevnú nulovú hodnotu pre pole bez hodnoty. Takto vyzerá zjednocovací SQL dotaz:

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;

Ak prepnete na údajové zobrazenie, posledných desať záznamov sa teraz zobrazí nasledovne:

Product ID Order Date Company Name Transaction Buy Sell
74 22.1.2006 Supplier B Purchase 20 0
77 22.1.2006 Supplier B Purchase 60 0
80 22.1.2006 Supplier D Purchase 75 0
81 22.1.2006 Supplier A Purchase 125 0
81 22.1.2006 Supplier A Purchase 200 0
7 20.1.2006 Company D Sale 0 10
51 20.1.2006 Company D Sale 0 10
80 20.1.2006 Company D Sale 0 10
34 15.1.2006 Company AA Sale 0 100
80 15.1.2006 Company AA Sale 0 30

Pokračujme v tomto príklade – čo ak sa rozhodnete, že polia s nulovými hodnotami majú byť prázdne? Pridaním kľúčového Null slova môžete upraviť zobrazenie SQL prázdneho slova namiesto nuly, ako je znázornené tu:

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;

Ako ste si už isto všimli, po prepnutí na údajové zobrazenie sa zobrazil neočakávaný výsledok. Každé pole v stĺpci Buy (Nákup) je prázdne:

Product ID Order Date Company Name Transaction Buy Sell
74 22.1.2006 Supplier B Purchase
77 22.1.2006 Supplier B Purchase
80 22.1.2006 Supplier D Purchase
81 22.1.2006 Supplier A Purchase
81 22.1.2006 Supplier A Purchase
7 20.1.2006 Company D Sale 10
51 20.1.2006 Company D Sale 10
80 20.1.2006 Company D Sale 10
34 15.1.2006 Company AA Sale 100
80 15.1.2006 Company AA Sale 30

Stalo sa to preto, lebo Access určuje typy údajov polí z prvého dotazu. V tomto príklade nie je hodnota Null číslom.

Čo sa teda stane, ak sa pokúsite vložiť prázdny reťazec pre prázdne hodnoty polí? Pri tomto pokuse môže vyzerať SQL takto:

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;

Keď prepnete na údajové zobrazenie, zistíte, že Access načítal hodnoty stĺpca Buy (Nákup), ale konvertoval ich na text. Viete, že ide o textové hodnoty, pretože v údajovom zobrazení sú zarovnané doľava. Prázdny reťazec v prvom dotaze nie je číslo, preto sa zobrazia takéto výsledky. Taktiež si všimnite, že hodnoty stĺpca Sell (Predaj) sú tiež konvertované na text, pretože záznamy o nákupe obsahujú prázdny reťazec.

Product ID Order Date Company Name Transaction Buy Sell
74 22.1.2006 Supplier B Purchase 20
77 22.1.2006 Supplier B Purchase 60
80 22.1.2006 Supplier D Purchase 75
81 22.1.2006 Supplier A Purchase 125
81 22.1.2006 Supplier A Purchase 200
7 20.1.2006 Company D Sale 10
51 20.1.2006 Company D Sale 10
80 20.1.2006 Company D Sale 10
34 15.1.2006 Company AA Sale 100
80 15.1.2006 Company AA Sale 30

Ako sa teda vyrieši tento hlavolam?

Jedným z riešení je vynútiť, aby dotaz predpokladal, že hodnota poľa bude číslo. Môžete tak urobiť pomocou tohto výrazu:


IIf(False, 0, Null)

Podmienka na kontrolu Falseje nikdy True, takže výraz vždy vráti .Null Access však naďalej vyhodnocuje obidve možnosti výstupu a zaobchádza s výstupom ako s číselným alebo Null.

Takýmto spôsobom môžeme použiť tento výraz v našom funkčnom príklade:


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;

Druhý dotaz nie je potrebné upraviť.

Ak prepnete na údajové zobrazenie, zobrazí sa požadovaný výsledok:

Product ID Order Date Company Name Transaction Buy Sell
74 22.1.2006 Supplier B Purchase 20
77 22.1.2006 Supplier B Purchase 60
80 22.1.2006 Supplier D Purchase 75
81 22.1.2006 Supplier A Purchase 125
81 22.1.2006 Supplier A Purchase 200
7 20.1.2006 Company D Sale 10
51 20.1.2006 Company D Sale 10
80 20.1.2006 Company D Sale 10
34 15.1.2006 Company AA Sale 100
80 15.1.2006 Company AA Sale 30

Alternatívnou metódou, pomocou ktorej dosiahnete rovnaký výsledok, je vložiť pred dotazy v zjednocovacom dotaze ešte ďalší dotaz:

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

Pre každé pole vráti Access pevné hodnoty údajového typu, ktorý definujete. Samozrejme, nechcete, aby bol výstup tohto dotazu ovplyvnený výsledkami. Trik, pomocou ktorého sa tomu vyhnete, je zahrnúť klauzulu WHERE k hodnote False:

WHERE False

To je malý trik. Keďže podmienka je vždy nepravdivá, dotaz nevráti nič. Skombinovaním tohto príkazu s existujúcou syntaxou SQL dosiahneme dokončený príkaz, ako je ten nasledujúci:

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;

Poznámka

V tomto príklade kombinovaný dotaz v databáze Northwind vracia 100 záznamov, zatiaľ čo dva samostatné dotazy vracajú jednotlivo 58 a 43 záznamov, čo je celkovo 101 záznamov. Tento rozdiel sa vyskytuje, pretože dva záznamy nie sú jedinečné. Pozrite si tému Práca s odlišnými záznamami v zjednocovacích dotazoch pomocou funkcie UNION ALL a zistite, ako tento scenár vyriešiť pomocou UNION ALL.

Pridanie súčtov do zjednocovacieho dotazu

Zjednocovací dotaz má špeciálne použitie na skombinovanie množiny záznamov s jedným záznamom, ktorý obsahuje súčet jedného alebo viacerých polí.

Tento príklad môžete vytvoriť vo vzorovej databáze Northwind na znázornenie toho, ako získať súčet v zjednocovacom dotaze.

  1. Ak chcete zobraziť nákup pív (Product ID=34 v databáze Northwind), vytvorte nový jednoduchý dotaz pomocou nasledovnej syntaxe 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. Prepnite na údajové zobrazenie a mali by ste vidieť štyri nákupy:

    Date Received Quantity
    22.1.2006 100
    22.1.2006 60
    4.4.2006 50
    5.4.2006 300
  3. Ak chcete získať súčet, vytvorte jednoduchý agregačný dotaz pomocou nasledujúcej syntaxe SQL:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
  4. Prepnite na údajové zobrazenie a mali by ste vidieť iba jeden záznam:

    MaxOfDate Received SumOfQuantity
    5.4.2006 510
  5. Skombinovaním týchto dvoch dotazov v zjednocovacom dotaze pridáte záznam so súčtom množstva k záznamom o nákupe:

    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. Prepnite na údajové zobrazenie. Mali by ste vidieť štyri nákupy so súčtom každého nákupu a následne záznam so súčtom množstva:

    Date Received Quantity
    22.1.2006 60
    22.1.2006 100
    4.4.2006 50
    5.4.2006 300
    5.4.2006 510

Tieto kroky pokrývajú základné informácie o pridávaní súčtov do zjednocovacieho dotazu. Možno budete chcieť zahrnúť do oboch dotazov pevné hodnoty, ako napríklad Detail (Podrobnosti) a Total (Súčet), a tak vizuálne odlíšiť záznam so súčtom od ostatných záznamov. Používanie pevných hodnôt si môžete prezrieť v časti Skombinovanie troch alebo viacerých tabuliek či dotazov v zjednocovacom dotaze.

Práca s rozdielnymi záznamami v zjednocovacích dotazoch s použitím kľúčového slova UNION ALL

Zjednocovacie záznamy v Accesse predvolene zahŕňajú iba rozdielne záznamy. Ale čo v prípade, že chcete zahrnúť všetky záznamy? Môže vám pomôcť ďalší príklad.

V predchádzajúcej časti sme vám ukázali, ako vytvoriť súčet v zjednocovacom dotaze. Upravte zjednocovací dotaz SQL tak, aby zahŕňal 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];

Keď prepnete na údajové zobrazenie, zobrazí sa (v istom zmysle) zavádzajúci výsledok:

Date Received Quantity
22.1.2006 100
22.1.2006 200

Samozrejme, jeden záznam nevracia dvojnásobok celkového množstva.

Tento výsledok sa zobrazí, pretože v jeden deň sa dvakrát predalo rovnaké množstvo čokolád, ako je to zaznamenané v tabuľke Purchase Order Details (Podrobnosti nákupnej objednávky). Tu je výsledok jednoduchého výberového dotazu zobrazujúci obidva záznamy vzorovej databázy Northwind:

Purchase Order ID Product Quantity
100 Northwind Traders Chocolate 100
92 Northwind Traders Chocolate 100

Môžete vidieť, že v predchádzajúcom zjednocovacom dotaze pole Purchase Order ID (ID nákupnej objednávky) nie je zahrnuté a dané dve polia netvoria dva odlišné záznamy.

Ak chcete zahrnúť všetky záznamy, použite UNION ALL namiesto vzorca .SQLUNION Pravdepodobne to ovplyvní zoradenie výsledkov, takže možno budete chcieť pridať klauzulu ORDER BY na určenie spôsobu zoradenia. Tu je úprava SQL na základe predchádzajúceho príkladu:


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

Prepnite na údajové zobrazenie. Okrem súčtu (ako pri poslednom zázname) by sa mali zobraziť aj všetky podrobnosti:

Date Received Total Quantity
22.1.2006 100
22.1.2006 100
22.1.2006 Total 200

Použitie zjednocovacieho dotazu na filtrovanie záznamov vo formulári prostredníctvom rozbaľovacieho poľa

Zjednocovací dotaz zvykne bežne slúžiť ako zdroj záznamov pre rozbaľovacie pole vo formulári. V takomto rozbaľovacom poli môžete vybrať hodnotu na filtrovanie záznamov formulára. Príkladom môže byť filtrovanie záznamov zamestnancov podľa ich mesta.

Ak chcete vedieť, ako to funguje, tu je ďalší príklad, ktorý môžete vytvoriť vo vzorovej databáze Northwind na znázornenie tohto scenára.

  1. Vytvorte jednoduchý výberový dotaz pomocou tejto SQL syntaxe:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
    
  2. Prepnite na údajové zobrazenie. Mali by sa zobraziť nasledujúce výsledky:

    City Filter
    Seattle Seattle
    Bellevue Bellevue
    Redmond Redmond
    Kirkland Kirkland
    Seattle Seattle
    Redmond Redmond
    Seattle Seattle
    Redmond Redmond
    Seattle Seattle
  3. Pohľad na tieto výsledky ale pre vás zrejme nemá vysokú hodnotu. Rozbaľte však dotaz a zmeňte ho na zjednocovací dotaz pomocou SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
    
  4. Prepnite na údajové zobrazenie. Mali by sa zobraziť nasledujúce výsledky:

    City Filter
    <Všetky> *
    Bellevue Bellevue
    Kirkland Kirkland
    Redmond Redmond
    Seattle Seattle

    Access vykoná zjednotenie deviatich (predtým zobrazených) záznamov pomocou pevných hodnôt <polí All> a "*". Keďže táto zjednocovacia klauzula neobsahuje UNION ALL, Access vráti len odlišné záznamy. To znamená, že každé mesto sa vráti len raz s pevnými identickými hodnotami.

  5. Teraz, keď je zjednocovací dotaz dokončený a zobrazuje názov každého mesta len raz, pričom obsahuje aj možnosť, ktorá efektívne vyberie všetky mestá, môžete tento dotaz použiť ako zdroj záznamov pre rozbaľovacie pole vo formulári. S použitím tohto konkrétneho príkladu ako modelu by ste mohli vytvoriť rozbaľovacie pole vo formulári, nastaviť tento dotaz ako zdroj záznamov, nastaviť vlastnosť Šírka stĺpca vo Filtri stĺpca na hodnotu 0 (nula), ak ho chcete skryť vizuálne, a potom nastaviť vlastnosť Viazaný stĺpec na hodnotu 1 ako označenie indexu druhého stĺpca. Do Filter vlastnosti samotného formulára môžete potom pridať kód ako je uvedený nižšie na aktiváciu filtra formulára pomocou hodnoty vybratej v rozbaľovacom poli:

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

    Používateľ formulára môže potom filtrovať záznamy formulára pre konkrétny názov mesta alebo vybrať položku <Všetko> a vytvoriť zoznam všetkých záznamov pre všetky mestá.

Na začiatok stránky