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

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

Včasih morda želite zapise iz ene tabele ali poizvedbe prikazati s tistimi iz ene ali več drugih tabel tako, da tvorijo en nabor zapisov – seznam z vsemi zapisi iz dveh ali več tabel. To je namen poizvedbe 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.

Opomba: Vsebina tega članka je namenjena za Accessove namizne zbirke podatkov. Poizvedbe za združevanje ni mogoče ustvariti ali uporabiti v Accessovih spletnih zbirkah podatkov ali Accessovih spletnih aplikacijah.

Ogled primera delujoče poizvedbe za združevanje

Če še nikoli niste ustvarili poizvedbe za združevanje, vam priporočamo, da najprej preučite delujoči primer v Accessovi predlogi za Northwind. Vzorčno predlogo za Northwind najdete na strani za začetek dela v Accessu tako, da kliknete Datoteka > Novo, kopijo pa lahko neposredno prenesete tudi s tega spletnega mesta: Vzorčna predloga za Northwind.

Ko Access odpre zbirko podatkov Northwind, opustite obrazec v pogovornem oknu za prijavo, ki se najprej prikaže, in nato razširite podokno za krmarjenje. Kliknite na vrh podokna za krmarjenje in nato izberite Vrsta predmeta, da razvrstite vse predmete zbirke podatkov glede na njihovo vrsto. Nato razširite skupino Poizvedbe, da prikažete poizvedbo, imenovano Transakcije izdelka.

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čajne poizvedbe za izbiranje in dejanja tabele v poizvedbi za združevanje niso povezane, kar pomeni, da ne morete uporabiti grafičnega načrtovalnika poizvedbe v Accessu za ustvarjanje ali urejanje poizvedb za združevanje. To boste opazili, če poizvedbo za združevanje odprete v podoknu za krmarjenje – Access jo odpre in prikaže rezultate v pogledu delovnega lista. Pod ukazom Pogledi na zavihku Osnovno boste opazili, da možnost Pogled načrta ni na voljo pri delu s poizvedbami za združevanje. Pri delu s poizvedbami za združevanje lahko preklapljate le med pogledoma Pogled podatkovnega lista in Pogled SQL.

Če želite nadaljevati ogled tega primera poizvedbe za združevanje, kliknite Osnovno > Pogledi > Pogled SQL, da si ogledate sintakso SQL, ki jo opredeljuje. Na to sliko smo dodali nekaj dodatnih presledkov v SQL, da si lahko hitro ogledate različne dele, ki sestavljajo poizvedbo za združevanje.

Vaš brskalnik ne podpira tega videoposnetka. Namestite Microsoft Silverlight, Adobe Flash Player ali Internet Explorer 9.

Podrobneje si oglejmo sintakso SQL te poizvedbe za združevanje v zbirki 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 izjave SQL je ključna beseda UNION, ki Accessu pove, da bo ta poizvedba združila ta dva nabora zapisov.

Zadnji del te izjave SQL določa vrstni red združenih zapisov z uporabo izjave za ORDER BY. Access bo v tem primeru vse zapise razvrstil glede na polje »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 neposredno napišete sintakso SQL v pogledu SQL, bo morda lažje, če jo ustvarite po delih s poizvedbami za izbiranje. 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. V pogovornem oknu Pokaži tabelo dvokliknite tabelo s polji, ki jih želite vključiti. Tabela se doda v okno z načrtom poizvedbe.

  3. Zaprite pogovorno polje Pokaži tabelo.

  4. 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.

  5. Lahko pa poljem dodate pogoje tako, da vnesete ustrezne izraze v vrstico »Pogoji« mreže polja.

  6. 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.

  7. Preklopite poizvedbo na pogled načrta.

  8. Shranite poizvedbo za izbiranje in jo pustite odprto.

  9. Ta postopek ponovite za vse poizvedbe za izbiranje, ki jih želite združiti.

Ko ustvarite poizvedbe za izbiranje, jih združite. V tem koraku ustvarite poizvedbo za združevanje s kopiranjem in lepljenjem izjav SQL.

  1. Na zavihku Ustvari v skupini Poizvedbe kliknite Načrt poizvedbe.

  2. Zaprite pogovorno polje Pokaži tabelo.

  3. Na zavihku Načrt v skupini Poizvedba kliknite Združevanje. Access skrije okno za načrtovanje poizvedbe in prikaže zavihek predmeta pogleda SQL, ki je trenutno prazen.

  4. Kliknite zavihek prve poizvedbe za izbiranje, ki jo želite združiti v poizvedbo za združevanje.

  5. Na zavihku Osnovno kliknite Pogled> Pogled SQL.

  6. Kopirajte izjavo SQL za poizvedbo za izbiranje. Kliknite zavihek poizvedbe za združevanje, ki ste jo ustvarili v prejšnjem koraku.

  7. Prilepite izjavo SQL poizvedbe za izbiranje na zavihek predmeta za pogled SQL poizvedbe za združevanje.

  8. Izbrišite podpičje (;) na koncu izjave SQL poizvedbe za izbiranje.

  9. Pritisnite tipko Enter, da premaknete kazalec eno vrstico nižje, nato pa v novo vrstico vnesite UNION.

  10. Kliknite zavihek naslednje poizvedbe za izbiranje, ki jo želite združiti v poizvedbo za združevanje.

  11. Ponavljate korake od 5 do 10 tega postopka, dokler niste kopirali in prilepili vseh izjav SQL poizvedb za izbiranje v okno »Pogled SQL« poizvedbe za združevanje. Ne izbrišite podpičja oz. ne vnesite ničesar za izjavo SQL, ki pripada zadnji poizvedbi za izbiranje.

  12. 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 vzorčni zbirki podatkov za 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.

Vaš brskalnik ne podpira tega videoposnetka. Namestite Microsoft Silverlight, Adobe Flash Player ali Internet Explorer 9.

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 dodatnih podpičij in dodati ključne besede UNION. Nato si lahko ogledate rezultate v pogledu podatkovnega lista.

  4. V eno od poizvedb dodajte stavek za razvrščanje in nato prilepite stavek ORDER BY v pogled SQL poizvedbe za združevanje. 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čna izjava SQL, ki združi in razvrsti imena v tem primeru poizvedbe za združevanje, je:

    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 obvladate pisanje v sintaksi SQL, lahko vsekakor napišete svojo izjavo SQL 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.

V primeru iz prejšnjega razdelka, v katerem je bila uporabljena zbirka podatkov Northwind, so združeni podatki samo iz 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 navedeni vsi zaposleni z imenom vzorčnega podjetja, kar najbrž ni zelo uporabno. Če želite, da je v tem polju navedeno, ali je oseba interni zaposleni, zaposleni pri dobavitelju in zaposleni pri vaši stranki, lahko namesto imena podjetja vključite nespremenljivo vrednost. Izjava SQL bi bila podobna tej:

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

Zgornjo poizvedbo je mogoče še dodatno zmanjšati, saj Access v poizvedbi za združevanje prebere samo imena polj z rezultati iz prve poizvedbe. Tukaj smo odstranili rezultat iz odseke druge in tretje 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];

V Accessovi poizvedbi za združevanje je razvrščanje po vrstnem redu dovoljeno samo enkrat, vendar je mogoče filtrirati vsako poizvedbo lahko posebej. Oglejte si spodnji primer filtriranja posamezne poizvedbe z dodajanjem stavka WHERE, za katerega je bila uporabljena poizvedba za združevanje iz prejšnjega razdelka.

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

Če se poizvedbe v združevanju med seboj zelo razlikujejo, bodo v polju z rezultati morda združeni podatki 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

Denimo, da želite polje »Količina« razdeliti na dve polji, in sicer »Nakup« in »Prodaja«. Denimo tudi, da želite za polje brez vrednosti imeti nespremenljivo ničelno vrednost. Izjava SQL za to poizvedbo za združevanje bo podoba tej:

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

Kaj lahko naredite, če nadaljujete s tem primerom in želite, da so polja z vrednostjo nič prazna? Izjavo SQL lahko spremenite tako, da namesto vrednosti nič ne prikaže, in sicer tako, da dodate ključno »Null«, na primer tako:

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 polja s praznimi vrednostmi? Izjava SQL za ta poskus je morda podobna tej:

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?

Rešitev je, da poizvedbo prisilite, naj pričakuje, da je vrednost polja število. To lahko dosežete s tem izrazom:

IIf(False, 0, Null)

Pogoj za preverjanje False ne bo nikoli True, zato bo izraz vedno vrnil Null, vendar Access še vedno ovrednoti obe možnosti rezultatov in se odloči, ali bo rezultat število ali ničelna vrednost.

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;

Upoštevajte, da druge poizvedbe ni treba spremeniti.

Č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 uporaben namig, saj je to vedno False, poizvedba pa 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: Združena poizvedba v tem primeru, ki uporablja zbirko podatkov Northwind, vrne 100 zapisov, medtem ko dve posamezni poizvedbi vrneta 58 in 43 zapisov za skupno 101 zapis. Razlog za to razliko je, ker dva zapisa nista enolična. Oglejte si razdelek Delo z razlikovalnimi zapisi v poizvedbah za združevanje z uporabo možnosti UNION ALL, če se želite naučiti razrešiti ta primer z uporabo možnosti UNION ALL.

Poseben primer za poizvedbo za združevanje je, da nabor zapisov združite 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 vključiti tudi nespremenljive vrednosti v obe poizvedbi, kot sta »Podrobnosti« in »Vsota«, s katerima vizualno ločite zapis skupne vsote 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.

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. To poizvedbo za združevanje SQL spremenite tako, da vsebuje ID izdelka = 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

En zapis seveda ne vrne dvakratne količine v skupni vsoti.

Ta rezultat se prikaže, ker je bila na en dan enaka količina čokolade prodana dvakrat, kot je to zabeleženo v tabeli s podrobnostmi naročilnice. 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 polji ne sestavljata dveh razlikovalnih zapisov.

Če želite vključiti vse zapise, v izjavi SQL namesto UNIOIN uporabite UNION ALL. S tem boste zelo verjetno vplivali na razvrščanje rezultatov, zato priporočamo, da vključite tudi stavek ORDER BY, s katerim določite vrstni red razvrščanja. Tukaj je prikazana spremenjena izjava SQL, ki za izhodišče uporablja prejšnji primer:

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

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 izbiranje s to sintakso SQL:

    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. Vendar pa razširite poizvedbo in jo pretvorite v poizvedbo za združevanje z uporabo te izjave 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ževanje devetih zapisov, ki so bili že prikazani, z nespremenljivimi vrednostmi polja <Vse> in »*«.

    Ker ta stavek združevanje ne vsebuje možnosti UNION ALL, Access vrne samo razlikovalne zapise, kar pomeni, da vsako mesto vrnjeno le enkrat z enakimi nespremenljivimi 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 lastnost »Filter« v samem obrazcu lahko nato dodate kodo, ki je podobna spodnji, da aktivirate filter obrazca z uporabo vrednosti, ki je bila izbrana v kontrolniku kombiniranega polja:

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

    Uporabnik obrazca lahko nato filtrira zapise obrazca po imenu določenega mesta ali izbere <Vse>, da prikaže vse zapise za vsa mesta.

Na vrh strani

Razširite poznavanje Officea
Oglejte si izobraževanje
Prvi dobite nove funkcije
Pridružite se programu Office Insider

Vam je bila informacija v pomoč?

Zahvaljujemo se vam za povratne informacije.

Zahvaljujemo se vam za povratne informacije. Videti je, da bi vam prišla prav pomoč enega od naših Officeovih agentov za podporo.

×