Združevanje več tabel v en rezultat s poizvedbo za združevanje

Velja za
Access za Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Včasih boste morda želeli združiti zapise iz ene tabele ali poizvedbe z zapisi iz ene ali več drugih tabel v en sam rezultat. To počne poizvedba za združevanje v Accessu.

Če se želite učinkovito seznaniti s poizvedbami za združevanje, se morate najprej seznaniti z načrtovanjem osnovnih poizvedb za izbiranje v Accessu. Več informacij o načrtovanju poizvedb za izbiranje najdete v članku Ustvarjanje preproste poizvedbe za izbiranje.

Ogled primera delujoče poizvedbe za združevanje

Če še nikoli niste ustvarili poizvedbe za združitev, vam bo morda pomagalo, če najprej preučite delujoč primer v predlogi Northwind Access. Vzorčno predlogo Northwind lahko poiščete na strani Uvod v Accessu, tako da izberete Datoteka>novo. Kopijo lahko prenesete tudi neposredno iz vzorčne predloge Northwind.

Ko Access odpre zbirko podatkov Northwind, zapustite pogovorno okno za prijavo, ki se najprej prikaže, in nato razširite podokno za krmarjenje. Izberite vrh podokna za krmarjenje in nato izberite Vrsta predmeta , da organizirate vse predmete zbirke podatkov po vrsti. Nato razširite skupino Poizvedbe in videli boste poizvedbo z imenom Transakcije izdelkov.

Poizvedbe za združevanje lahko preprosto ločite od drugih predmetov poizvedbe, saj imajo posebno ikono, podobno dvema prepletenima krogoma, ki predstavlja združen nabor dveh naborov:

Posnetek zaslona ikone poizvedbe za združevanje v Accessu. Za razliko od običajnih poizvedb za izbiro in dejanje tabele niso povezane v poizvedbi za združevanje. To pomeni, da Accessovega oblikovalnika grafičnih poizvedb ne morete uporabiti za ustvarjanje ali urejanje poizvedb za združevanje. Če odprete poizvedbo za združevanje v podoknu za krmarjenje, jo Access odpre in prikaže rezultate v pogledu podatkovnega lista. V razdelku Pogledi na zavihku Osnovno upoštevajte, da pogled načrta ni na voljo, ko delate s poizvedbami za združevanje. Preklapljate lahko le med pogledom podatkovnega lista in pogledom SQL.

Če želite nadaljevati s preučevanjem tega primera poizvedbe za združevanje, kliknite Domov>Pogledi>SQL , da si ogledate SQL sintakso, ki ga določa. Na tej sliki smo dodali nekaj dodatnega razmika SQL , tako da si lahko preprosto ogledate različne dele, ki sestavljajo poizvedbo za združitev.

Oglejmo si podrobno SQL sintakso te poizvedbe za združevanje iz baze podatkov 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;

Prvi in tretji del te izjave SQL sta pravzaprav dve poizvedbi za izbiranje. Ti poizvedbi pridobita različne nabore zapisov: enega iz tabele Naročila izdelkov in enega iz tabele Nakup izdelkov.

Drugi del te SQL izjave je ključna beseda UNION , ki Accessu pove, da združi ta dva niza zapisov.

Zadnji del te SQL izjave določa vrstni red združenih zapisov z izjavo.ORDER BY V tem primeru Access razvrsti vse zapise po polju »Datum naročila« v padajočem vrstnem redu.

Opomba

Poizvedbe za združevanje so vedno samo za branje v Accessu, zato ne morete spremeniti nobenih vrednosti v pogledu podatkovnega lista.

Ustvarjanje poizvedbe za združevanje z ustvarjanjem in združevanjem poizvedb za izbiranje

Čeprav lahko poizvedbo za združevanje ustvarite tako, da sintakso SQL napišete neposredno v pogledu SQL, jo boste morda lažje sestavili v dele z izbranimi poizvedbami. Nato lahko kopirate in prilepite dele SQL v združeno poizvedbo za združevanje.

Če želite preskočiti ta navodila in se namesto tega ogledati primer, si oglejte naslednji razdelek z naslovom Ogled primera ustvarjanja poizvedbe za združevanje.

  1. Na zavihku Ustvari v skupini Poizvedbe kliknite Načrt poizvedbe.
  2. Dvokliknite tabelo s polji, ki jih želite vključiti. Tabela se doda v okno z načrtom poizvedbe.
  3. V oknu z načrtom poizvedbe dvokliknite vsako polje, ki ga želite vključiti. Ko izbirate polja, preverite, ali ste dodali enako število polj in ali so v enakem vrstne redu kot ste jih dodali tudi v druge poizvedbe za izbiranje. Še posebej pa bodite pozorni na vrste podatkov v poljih in preverite, ali imajo v drugih poizvedbah, ki jih združujete, združljive vrste podatkov s polji na istem mestu. Če na primer najprej izberete poizvedbo s petimi polji in prvo polje vsebuje podatke o datumu/uri, se prepričajte, da imajo vse druge poizvedbe za izbiranje, ki jih združujete, pet polj in prvo polje vsebuje podatke o datumu/uri itd.
  4. Lahko pa poljem dodate pogoje tako, da vnesete ustrezne izraze v vrstico »Pogoji« mreže polja.
  5. Ko končate dodajanje polj in pogojev polj, zaženite poizvedbo za izbiranje in si oglejte njene rezultate. Na zavihku Načrt v skupini Rezultati kliknite Zaženi.
  6. Preklopite poizvedbo na pogled načrta.
  7. Shranite poizvedbo za izbiranje in jo pustite odprto.
  8. Ta postopek ponovite za vse poizvedbe za izbiranje, ki jih želite združiti.

Zdaj, ko ste ustvarili izbirne poizvedbe, je čas, da jih združite. V tem koraku ustvarite poizvedbo za združevanje tako, da kopirate in prilepite izjave SQL .

  1. Na zavihku Ustvari v skupini Poizvedbe kliknite Načrt poizvedbe.
  2. Na zavihku Načrt v skupini Poizvedba kliknite Združi. Access skrije okno načrta poizvedbe in prikaže zavihek » Pogled SQL «. Na tej točki je zavihek prazen.
  3. Kliknite zavihek prve poizvedbe za izbiranje, ki jo želite združiti v poizvedbo za združevanje.
  4. Na zavihku Osnovno kliknite Ogled>pogleda SQL.
  5. Kopirajte SQL izjavo za poizvedbo za izbiro. Kliknite zavihek poizvedbe za združevanje, ki ste jo ustvarili v prejšnjem koraku.
  6. Prilepite SQL izjavo za poizvedbo za izbiranje na zavihek » Pogled SQL « v poizvedbi za združevanje.
  7. Izbrišite podpičje (;) na koncu izjave poizvedbe SQL select.
  8. Pritisnite tipko Enter, da premaknete kazalec za eno vrstico navzdol, nato pa vnesite UNION novo vrstico.
  9. Kliknite zavihek naslednje poizvedbe za izbiranje, ki jo želite združiti v poizvedbo za združevanje.
  10. Ponavljajte korake od 5 do 10, dokler ne kopirate in prilepite vseh SQL izjav za izbirne poizvedbe v okno »Pogled SQL « poizvedbe za združevanje. Ne izbrišite podpičja in ne vnesite ničesar, kar sledi SQL izjavi za zadnjo izbirno poizvedbo.
  11. Na zavihku Načrt v skupini Rezultati kliknite Zaženi.

Rezultati poizvedbe za združevanje so prikazani v pogledu podatkovnega lista.

Ogled primera ustvarjanja poizvedbe za združevanje

Tukaj je primer, ki ga lahko znova ustvarite v zbirki vzorčnih zbirk podatkov Northwind. Ta poizvedba za združevanje zbere imena oseb iz tabele Stranke in jih združi z imeni oseb iz tabele Dobavitelji. Če želite uporabiti ta primer, upoštevajte ta navodila v svoji kopiji vzorčne zbirke podatkov Northwind.

Spodaj so navedena navodila, potrebna za ustvarjanje tega primera:

  1. Ustvarite dve poizvedbe za izbiranje, imenovani »Poizveba1« in »Poizvedba2« s tabelama »Stranke« in »Dobavitelji« kot viroma podatkov. Uporabite polji »Ime« in »Priimek« kot prikazane vrednosti.

  2. Ustvarite novo poizvedbo, imenovano »Poizvedba3«, ki sprva nima vira podatkov, in nato kliknite ukaz Unija na zavihku Načrt, da to poizvedbo nastavite kot poizvedbo za združevanje.

  3. Kopirajte in prilepite izjave SQL iz poizvedbe1 in poizvedbe2 v poizvedbo3. Ne pozabite odstraniti dodatnega podpičja in dodati ključno besedo UNION . Nato si lahko ogledate rezultate v pogledu podatkovnega lista.

  4. V eno od poizvedb dodajte klavzulo o razvrščanju in nato prilepite ORDER BY izjavo v poizvedbo za združevanje v pogledu SQL. Opazili boste, da so v poizvedbi3 iz poizvedbe za združevanje, ko dodate stavek za razvrščanje, najprej odstranjena podpičja in nato še ime tabele iz imena polj.

  5. Končni primer SQL , ki združuje in razvršča imena za ta primer poizvedbe za združevanje, je naslednji:

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

Če vam zelo ustreza pisanje SQL sintakse, lahko napišete svojo SQL izjavo za poizvedbo za združevanje neposredno v pogledu SQL. Vendar pa bo morda uporabno, če uporabite pristop kopiranja in lepljenja izjave SQL iz drugih predmetov poizvedbe. Vsaka poizvedba je lahko veliko bolj zapletena od tukaj uporabljenih primerov preproste poizvedbe za izbiranje. Morda bo uporabno, če ustvarite in natančno preskusite vsako poizvedbo, preden jih združite v poizvedbo za združevanje. Če poizvedbe za združevanje ne morete zagnati, lahko prilagodite vsako poizvedbo posebej tako, da jo boste lahko zagnali, in nato znova ustvarite poizvedbo za združevanje s popravljeno sintakso.

Več nasvetov in namigov o uporabi poizvedb za združevanje najdete v preostalih razdelkih v tem članku.

Združevanje treh ali več tabel ali poizvedb v poizvedbo za združevanje

V primeru iz prejšnjega razdelka, ki uporablja zbirko podatkov Northwind, so združeni podatki iz samo dveh tabel. Vendar pa lahko v poizvedbo za združevanje zelo preprosto združite tri ali več tabel. Če za izhodišče uporabite na primer prejšnji primer, lahko v rezultat poizvedbe vključite imena zaposlenih. To lahko naredite tako, da dodate tretjo poizvedbo in jo združite s prejšnjo izjavo SQL z dodatno ključno besedo UNION, in sicer tako:


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

Ko si ogledate rezultat v pogledu podatkovnega lista, bodo vsi zaposleni navedeni z vzorčnim imenom podjetja, kar verjetno ni zelo uporabno. Če želite, da je v tem polju prikazano, ali je oseba interni zaposleni, dobavitelj ali stranka, lahko namesto imena podjetja vključite fiksno vrednost . Tukaj je videti 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];

Rezultati v pogledu podatkovnega lista pa so takšni. Access prikaže teh pet vzorčnih zapisov:

Zaposlitev Priimek Ime
Interna Novak Tina
Interna Cajhen Barbara
Dobavitelj Glažar Stane
Stranka Gobec Janez
Stranka Lubej Novak Franc

Poizvedbo lahko še bolj zmanjšate, ker Access prebere imena izhodnih polj le iz prve poizvedbe v poizvedbi za združevanje. Tukaj je odstranjen izhod iz drugega in tretjega odseka poizvedbe:


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

Filtriranje v poizvedbah za združevanje

V Accessovi poizvedbi za združevanje je naročanje dovoljeno samo enkrat, vendar lahko vsako poizvedbo filtrirate posebej. Na podlagi poizvedbe za združevanje v prejšnjem razdelku je tukaj primer, ki filtrira vsako poizvedbo z dodajanjem stavka 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];

Preklopite na pogled podatkovnega lista, če želite prikazati rezultate, podobne tem:

Zaposlitev Priimek Ime
Dobavitelj Kovač Katarina
Interna Novak Tina
Stranka Žan Gregor
Interna Zupanc Makovec Sonja
Dobavitelj Lah Dežman Amalija
Stranka Miklič Martin
Dobavitelj Marolt Miha
Dobavitelj Zorko Sonja
Interna Kopač Andrej
Dobavitelj Kolar Kornelija
Interna Palčič Robert

Mešanje tipov podatkov

Če so poizvedbe, ki jih združite, zelo različne, lahko naletite na situacijo, v kateri mora izhodno polje združevati podatke različnih podatkovnih tipov. V takem primeru poizvedba za združevanje najpogosteje vrne rezultate kot podatkovni tip besedila, saj ta podatkovni tip podpira tako besedilo kot tudi številke.

Za prikaz delovanja tega primera bomo uporabili poizvedbo za združevanje Transakcije izdelka v vzorčni zbirki podatkov Northwind. Odprite to vzorčno zbirko podatkov in nato odprite poizvedbo »Transakcije izdelka« v pogledu podatkovnega lista. Zadnjih deset zapisov bi moralo biti podobnih temu rezultatu:

ID izdelka Datum naročila Ime podjetja Transakcija Količina
77 22. 1. 2006 Dobavitelj B Nakup 60
80 22. 1. 2006 ID dobavitelja Nakup 75
81 22. 1. 2006 Dobavitelj A Nakup 125
81 22. 1. 2006 Dobavitelj A Nakup 200
7 20. 1. 2006 ID podjetja Prodaja 10
51 20. 1. 2006 ID podjetja Prodaja 10
80 20. 1. 2006 ID podjetja Prodaja 10
34 15. 1. 2006 Podjetje AA Prodaja 100
80 15. 1. 2006 Podjetje AA Prodaja 30

Predpostavimo, da želite polje »Količina« razdeliti na dve polji: »Nakup« in »Prodaj«. Predpostavimo tudi, da želite fiksno ničelno vrednost za polje brez vrednosti. Tukaj je videz SQL za to poizvedbo o združitvi:

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;

Če preklopite na pogled podatkovnega lista, bo zadnjih deset zapisov zdaj prikazanih tako:

ID izdelka Datum naročila Ime podjetja Transakcija Nakup Prodaja
74 22. 1. 2006 Dobavitelj B Nakup 20 0
77 22. 1. 2006 Dobavitelj B Nakup 60 0
80 22. 1. 2006 ID dobavitelja Nakup 75 0
81 22. 1. 2006 Dobavitelj A Nakup 125 0
81 22. 1. 2006 Dobavitelj A Nakup 200 0
7 20. 1. 2006 ID podjetja Prodaja 0 10
51 20. 1. 2006 ID podjetja Prodaja 0 10
80 20. 1. 2006 ID podjetja Prodaja 0 10
34 15. 1. 2006 Podjetje AA Prodaja 0 100
80 15. 1. 2006 Podjetje AA Prodaja 0 30

Če nadaljujete s tem primerom, kaj če želite, da so polja z ničelnimi vrednostmi prazna? Če dodate ključno besedo, lahko spremenite tako SQL , da ne prikažete ničesar, tako da dodate ključno besedo Null , kot je prikazano tukaj:

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;

Vendar pa boste zdaj morda dobili nepričakovan rezultat, kot ste morda opazili pri preklopu na pogled podatkovnega lista. V stolpcu »Nakup« so vsa polja počiščena:

ID izdelka Datum naročila Ime podjetja Transakcija Nakup Prodaja
74 22. 1. 2006 Dobavitelj B Nakup
77 22. 1. 2006 Dobavitelj B Nakup
80 22. 1. 2006 ID dobavitelja Nakup
81 22. 1. 2006 Dobavitelj A Nakup
81 22. 1. 2006 Dobavitelj A Nakup
7 20. 1. 2006 ID podjetja Prodaja 10
51 20. 1. 2006 ID podjetja Prodaja 10
80 20. 1. 2006 ID podjetja Prodaja 10
34 15. 1. 2006 Podjetje AA Prodaja 100
80 15. 1. 2006 Podjetje AA Prodaja 30

To se zgodi, ker Access določi podatkovne tipe polj iz prve poizvedbe. V tem primeru »Null« ni število.

Kaj se torej zgodi, če poskusite vstaviti prazen niz za prazne vrednosti polj? Postopek SQL za ta poskus je morda videti tako:

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;

Ko preklopite na pogled podatkovnega lista, boste opazili, da Access pridobi vrednosti iz stolpca »Nakupa«, vendar jih pretvori v besedilo. Te besedilne vrednosti prepoznate po poravnavi na levo v pogledu podatkovnega lista. Prazen niz v prvi poizvedbi ni število, zato vidite te rezultate. Opazili boste tudi, da so tudi vrednosti v polju »Prodaja« pretvorjene v besedilo, ker zapisi nakupa vsebujejo prazen niz.

ID izdelka Datum naročila Ime podjetja Transakcija Nakup Prodaja
74 22. 1. 2006 Dobavitelj B Nakup 20
77 22. 1. 2006 Dobavitelj B Nakup 60
80 22. 1. 2006 ID dobavitelja Nakup 75
81 22. 1. 2006 Dobavitelj A Nakup 125
81 22. 1. 2006 Dobavitelj A Nakup 200
7 20. 1. 2006 ID podjetja Prodaja 10
51 20. 1. 2006 ID podjetja Prodaja 10
80 20. 1. 2006 ID podjetja Prodaja 10
34 15. 1. 2006 Podjetje AA Prodaja 100
80 15. 1. 2006 Podjetje AA Prodaja 30

Kako torej rešite to uganko?

Ena od rešitev je, da poizvedbo prisilite, naj pričakuje, da je vrednost polja število. To lahko naredite s tem izrazom:


IIf(False, 0, Null)

Pogoj, ki ga je treba preveriti, False, ni nikoli True, zato izraz vedno vrne Null. Access pa še vedno ovrednoti obe možnosti izhoda in obravnava rezultat kot številski ali Null.

Ta izraz lahko v našem primeru uporabimo tako:


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;

Druge poizvedbe vam ni treba spreminjati.

Če preklopite na pogled podatkovnega lista, boste videli želeni rezultat:

ID izdelka Datum naročila Ime podjetja Transakcija Nakup Prodaja
74 22. 1. 2006 Dobavitelj B Nakup 20
77 22. 1. 2006 Dobavitelj B Nakup 60
80 22. 1. 2006 ID dobavitelja Nakup 75
81 22. 1. 2006 Dobavitelj A Nakup 125
81 22. 1. 2006 Dobavitelj A Nakup 200
7 20. 1. 2006 ID podjetja Prodaja 10
51 20. 1. 2006 ID podjetja Prodaja 10
80 20. 1. 2006 ID podjetja Prodaja 10
34 15. 1. 2006 Podjetje AA Prodaja 100
80 15. 1. 2006 Podjetje AA Prodaja 30

Drug način za pridobitev enakega rezultata, da poizvedbam v poizvedbi za združevanje vnaprej dodate še eno poizvedbo:

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 za vsako polje vrne nespremenljive vrednosti za določen podatkovni tip. Seveda pa ne želite, da rezultat te poizvedbe vpliva na rezultate, zato morate v vrednost False vključiti stavek WHERE:

WHERE False

To je majhen trik. Ker je pogoj vedno »false«, poizvedba ne vrne ničesar. Če to izjavo združite z obstoječo izjavo SQL, je končna izjava podobna tej:

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;

Opomba

V tem primeru združena poizvedba v zbirki podatkov Northwind vrne 100 zapisov, medtem ko dve posamezni poizvedbi vrneta 58 in 43 zapisov za skupno 101 zapis. Do te razlike pride, ker dva zapisa nista enolična. Če želite izvedeti, kako razrešiti ta primer z uporabo UNION ALLmožnosti .

Dodajanje skupnih vsot v poizvedbo za združevanje

Poizvedbo za združevanje lahko posebej uporabite združevanje nabora zapisov z enim zapisom, ki vsebuje vsoto vrednost enega ali več polj.

Tukaj je še en primer, ki ga lahko ustvarite v vzorčni zbirki podatkov Northwind, da prikažete, kako pridobite skupno vsoto v poizvedbi za združevanje.

  1. Ustvarite novo preprosto poizvedbo za prikaz nakupa piva (ID izdelka v zbirki podatkov Northwind je 34 ) v tej sintaksi 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. Ko preklopite na pogled podatkovnega lista, bi morali biti prikazani štirje nakupi:

    Datum prejema Količina
    22. 1. 2006 100
    22. 1. 2006 60
    4. 4. 2006 50
    5. 4. 2006 300
  3. Če želite pridobiti skupno vsoto, ustvarite preprosto poizvedbo za zbiranje s to izjavo SQL:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
  4. Ko preklopite na pogled podatkovnega lista, bi moral biti prikazan samo en zapis:

    MaxOfDate Received SumOfQuantity
    5. 4. 2006 510
  5. Te dve poizvedbi združite v poizvedbo za združevanje, da v zapise nakupa dodate zapis s skupno količino:

    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. Ko preklopite na pogled podatkovnega lista, bi morali biti prikazani štirje nakupi z vsoto posameznega nakupa, ki ji sledi zapis s skupno vsoto količine:

    Datum prejema Količina
    22. 1. 2006 60
    22. 1. 2006 100
    4. 4. 2006 50
    5. 4. 2006 300
    5. 4. 2006 510

To opisuje osnove dodajanja skupnih vsot v poizvedbo za združevanje. Morda boste želeli v obe poizvedbi vključiti tudi fiksne vrednosti, na primer »Podrobnosti« in »Skupaj«, da vizualno ločite zapis skupne vrednosti od drugih zapisov. Primer uporabe nespremenljivih vrednosti si lahko ogledate v razdelku Združevanje treh ali več tabel ali poizvedb v poizvedbo za združevanje.

Delo z razlikovalnimi zapisi v poizvedbah za združevanje z možnostjo UNION ALL

Poizvedbe za združevanje v Accessu privzeto vključujejo samo razlikovalne zapise. Kaj pa če želite vključiti vse zapise? Tukaj bo morda uporaben še en primer.

V prejšnjem razdelku smo vam pokazali, kako v poizvedbi za združevanje ustvarite skupno vsoto. Spremenite poizvedbo SQL za združevanje tako, da vključi 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];

Ko preklopite na pogled podatkovnega lista, bi moral biti prikazan nekoliko zavajajoč rezultat:

Datum prejema Količina
22. 1. 2006 100
22. 1. 2006 200

Seveda en zapis ne vrne dvakratne skupne količine.

Ta rezultat je prikazan, ker je bila v enem dnevu enaka količina čokolade prodana dvakrat, kot je prikazano v tabeli Podrobnosti naročila. Tukaj je prikazan rezultat preproste poizvedbe za izbiranje, ki prikazuje oba zapisa v vzorčni zbirki podatkov Northwind:

ID naročilnice Izdelek Količina
100 Čokolada Northwind Traders 100
92 Čokolada Northwind Traders 100

V prej omenjeni poizvedbi za združevanje lahko vidite, da polje ID naročilnice ni vključeno in da obe polji ne sestavljata dveh ločenih zapisov.

Če želite vključiti vse zapise, uporabite UNION ALL namesto v UNION .SQL To bo najverjetneje vplivalo na razvrščanje rezultatov, zato boste morda želeli vključiti tudi stavek ORDER BY za določitev vrstnega reda razvrščanja. Tukaj je spremenjeno na SQL podlagi prejšnjega primera:


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

Ko preklopite na pogled podatkovnega lista, bi se morale poleg skupne vsote prikazati vse podrobnosti kot zadnji zapis:

Datum prejema Skupna vsota Količina
22. 1. 2006 100
22. 1. 2006 100
22. 1. 2006 Skupna vsota 200

Uporaba poizvedbe za združevanje za filtriranje zapisov v obrazcu prek kontrolnika kombiniranega polja

Pogost način uporabe poizvedbe za združevanje je uporaba poizvedbe kot vira zapisov za kontrolnik kombiniranega polja v obrazcu. To kombinirano polje lahko uporabite za izbor vrednosti za filtriranje zapisov obrazca. Na primer za filtriranje zapisov zaposlenih glede na njihovo mesto.

Tukaj je še en primer, ki ga lahko ustvarite v vzorčni zbirki podatkov Northwind, da prikažete, kako bi ta primer lahko deloval.

  1. Ustvarite preprosto poizvedbo za izbiro s to SQL sintakso:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
    
  2. Ko preklopite na pogled podatkovnega lista, bi morali biti prikazani ti rezultati:

    Mesto Filter
    Slovenj Gradec Slovenj Gradec
    Portorož Portorož
    Ljubljana Ljubljana
    Maribor Maribor
    Slovenj Gradec Slovenj Gradec
    Ljubljana Ljubljana
    Slovenj Gradec Slovenj Gradec
    Ljubljana Ljubljana
    Slovenj Gradec Slovenj Gradec
  3. Ti rezultati morda niso dokaj uporabni. Razširite poizvedbo in jo spremenite v poizvedbo za združevanje tako SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
    
  4. Ko preklopite na pogled podatkovnega lista, bi morali biti prikazani ti rezultati:

    Mesto Filter
    <Vse> *
    Portorož Portorož
    Maribor Maribor
    Ljubljana Ljubljana
    Slovenj Gradec Slovenj Gradec

    Access izvede združitev devetih zapisov, ki so bili prej prikazani, s fiksnimi vrednostmi polj <All> in »*«. Ker ta spojni klavzul ne vsebuje UNION ALL, Access vrne le ločene zapise. To pomeni, da se vsako mesto vrne samo enkrat s fiksnimi enakimi vrednostmi.

  5. Ko ustvarite poizvedbo za združevanje, ki vsako ime mesta prikaže le enkrat, poleg tega pa še možnost, ki učinkovito izbere vsa mesta, pa lahko to poizvedbo uporabite kot vir zapisa za kombinirano polje v obrazcu. Če ta določen primer uporabite kot model, lahko v obrazcu ustvarite kontrolnik kombiniranega polja, nastavite to poizvedbo kot vir zapisa, lastnost »Širina stolpca« za stolpec »Filter« nastavite na 0 (nič), da ga skrijete, in nato lastnost »Vezan stolpec« nastavite na 1, da označite kazalo drugega stolpca. V Filter lastnosti samega obrazca lahko nato dodate kodo, kot je ta, da aktivirate filter obrazca z vrednostjo, izbrano v kontrolniku kombiniranega polja:

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

    Uporabnik obrazca lahko nato filtrira zapise obrazca na določeno ime mesta ali pa izbere <Vse,> da navede vse zapise za vsa mesta.

Na vrh strani