Useiden kyselyjen yhdistäminen yhdeksi tulokseksi yhdistämiskyselyn avulla
Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Joskus haluat ehkä luetteloida yhden taulukon tai kyselyn tietueet yhdessä yhden tai useamman muun taulukon kanssa niin että saat yhden tietuejoukon, joka sisältää kaikki yhden tai useamman taulukon sisältämät tietueet. Tämä on Accessin yhdistämiskyselyn tarkoitus.

Jotta ymmärrät kunnolla, mistä yhdistämiskyselyssä on kyse, sinun on hyvä ensin perehtyä siihen, miten Accessissa luodaan yksinkertaisia valintakyselyitä. Lisätietoja valintakyselyjen suunnittelemisesta saat artikkelista Yksinkertaisen valintakyselyn luominen.

Perehtyminen toimivaan esimerkkiin yhdistämiskyselystä

Jos et ole koskaan ennen luonut yhdistämiskyselyä, kannattaa ehkä tarkastella toimivaa esimerkkiä sellaisesta Northwind Access -mallissa. Voit hakea Northwind-esimerkkimallia Accessin aloitussivulta napsauttamalla Tiedosto > Uusi tai voit suoraan ladata kopion tästä sijainnista: Northwind-esimerkkimalli.

Kun Access avaa Northwind-tietokannan, sulje ensiksi aukeava kirjautumislomake ja laajenna sitten siirtymisruutua. Napsauta siirtymisruudun yläreunaa ja valitse sitten Objektityyppi kaikkien tietokantaobjektien järjestämiseksi niiden tyypin mukaan. Laajenna seuraavaksi Kyselyt-ryhmä, niin näet kyselyn nimeltä Tuotetapahtumat.

Yhdistämiskyselyt on helppo erottaa muista kyselyobjekteista, koska niillä on erityinen kuvake, joka muistuttaa kahta yhteen kietoutunutta ympyrää ja edustaa kahdesta joukosta yhdistettyä joukkoa:

Näyttökuva Accessin yhdistämiskyselykuvakkeesta.

Toisin kuin normaaleissa valinta- ja muutoskyselyissä, taulukot eivät ole yhteydessä toisiinsa yhdistämiskyselyssä, mikä tarkoittaa, että Accessin graafista kyselyjen suunnittelutyökalua ei voi käyttää yhdistämiskyselyjen luomiseen eikä muokkaamiseen. Huomaat tämän, jos avaat yhdistämiskyselyn siirtymisruudusta: Access avaa sen ja näyttää tulokset taulukkonäkymässä. Näkymät- komennon kohdalla Aloitus-välilehdessä huomaat, että Rakennenäkymä ei ole käytettävissä yhdistämiskyselyjä käsiteltäessä. Yhdistämiskyselyillä työskennellessä voit siirtyä vain Taulukkonäkymän ja SQL-näkymän välillä.

Jatka tämän yhdistämiskyselyesimerkin tarkastelua napsauttamalla Aloitus > Näkymät > SQL-näkymä, jolloin pääset tarkastelemaan sen määrittävää SQL-syntaksia. Oheisessa kuvassa SQL:ään on lisätty joitakin ylimääräisiä välilyöntejä, joten näet helposti yhdistämiskyselyn muodostavat osat.

Selaimesi ei tue videotoimintoa. Asenna Microsoft Silverlight, Adobe Flash Player tai Internet Explorer 9.

Tarkastellaanpa yksityiskohtaisesti tämän Northwind-tietokannan yhdistämiskyselyn SQL-syntaksia:

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;

Tämän SQL-lausekkeen ensimmäinen ja kolmas osa ovat käytännössä kaksi valintakyselyä. Nämä kyselyt noutavat kaksi erilaista tietuejoukkoa; yhden taulukosta Tuotantotilaukset ja yhden taulukosta Tuoteostot.

Tämän SQL-lausekkeen toinen osa on avainsana UNION, joka kertoo Accessille, että tämä kysely yhdistää nämä kaksi tietuejoukkoa.

Tämän SQL-lausekkeen viimeinen osa määrittää yhdistettyjen tietueiden järjestyksen käyttämällä ORDER BY -lauseketta. Tässä esimerkissä Access järjestää kaikki tietueet Tilauspäivä-kentän mukaan laskevassa järjestyksessä.

Huomautus: Yhdistämiskyselyt ovat Accessissa aina vain luku -tilassa; taulukkonäkymän mitään arvoja ei voi muuttaa.

Yhdistämiskyselyn luominen luomalla ja yhdistämällä valintakyselyitä

Vaikka voit luoda yhdistämiskyselyn kirjoittamalla suoraan SQL-syntaksia SQL-näkymään, voi olla helpompaa rakentaa se osissa valintakyselyistä. Voit sitten kopioida ja liittää SQL-osat yhdistetyksi yhdistämiskyselyksi.

Jos haluat ohittaa työvaiheiden lukemisen ja katsella sen sijaan esimerkkiä, siirry seuraavaan osaan: Katso esimerkki yhdistämiskyselyn luomisesta.

  1. Valitse Luo-välilehden Kyselyt-ryhmässä Kyselyn rakennenäkymä.

  2. Kaksoisnapsauta taulukkoa, joka sisältää sisällytettävät kentät. Järjestelmä lisää taulukon kyselyn suunnitteluikkunaan.

  3. Kaksoisnapsauta kyselyn suunnitteluikkunassa kutakin sisällytettävää kenttää. Kun valitset kenttiä, muista lisätä sama määrä kenttiä ja samassa järjestyksessä kuin toisissa valintakyselyissä. Varmista, että kenttien tietotyypit ovat yhteensopivat toisten kyselyiden vastaavissa paikoissa olevien kenttien kanssa. Jos esimerkiksi ensimmäisessä valintakyselyssä on viisi kenttää, joista ensimmäisessä on päivämäärä/aika-arvoja, varmista, että muissa yhdistettävissä valintakyselyissä on myös viisi kenttää ja että ensimmäisessä on päivämäärä/aika-arvoja.

  4. Vaihtoehtoisesti voit lisätä ehtoja kenttiin kirjoittamalla tarvittavat lausekkeet kenttäruudukon Ehdot-riville.

  5. Kun olet lisännyt haluamasi kentät ja kenttien ehdot, voit suorittaa valintakyselyn ja tarkastella sen tuloksia. Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.

  6. Siirry kyselyn rakennenäkymään.

  7. Tallenna valintakysely ja jätä se avatuksi.

  8. Toista edellä mainitut toimet kaikille yhdistettäville valintakyselyille.

Nyt, kun olet luonut valintakyselysi, on aika yhdistää ne. Tässä vaiheessa luot yhdistämiskyselyn kopioimalla ja liittämällä SQL-lausekkeita.

  1. Valitse Luo-välilehden Kyselyt-ryhmässä Kyselyn rakennenäkymä.

  2. Napsauta Rakenne-välilehden Kysely-ryhmässä Yhdistämiskysely. Access piilottaa kyselyn suunnitteluikkunan ja näyttää SQL-näkymän objektivälilehden. Tässä vaiheessa SQL-näkymän objektivälilehti on tyhjä.

  3. Napsauta ensimmäisen yhdistämiskyselyyn lisättävän valintakyselyn välilehteä.

  4. Valitse Aloitus-välilehdestä Näytä > SQL-näkymä.

  5. Kopioi valintakyselyn SQL-koodi. Napsauta sen yhdistämiskyselyn välilehteä, jota aloit luoda aikaisemmin.

  6. Liitä valintakyselyn SQL-koodi yhdistämiskyselyn SQL-näkymän objektivälilehteen.

  7. Poista valintakyselyn SQL-lauseen lopussa oleva puolipiste (;).

  8. Siirrä kohdistinta rivi alaspäin painamalla Enter-näppäintä ja kirjoita sitten uudelle riville UNION.

  9. Napsauta seuraavan yhdistämiskyselyyn lisättävän valintakyselyn välilehteä.

  10. Noudata vaiheita 5–10, kunnes olet kopioinut ja liittänyt kaikkien valintakyselyiden SQL-koodin yhdistämiskyselyn SQL-näkymä-ikkunaan. Älä poista viimeisen valintakyselyn lopusta puolipistettä tai lisää loppuun mitään.

  11. Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.

Yhdistämiskyselyn tulos näkyy taulukkonäkymässä.

Katso esimerkki yhdistämiskyselyn luomisesta

Tässä on esimerkki, jonka voit luoda uudestaan Northwind-esimerkkitietokannassa. Tämä yhdistämiskysely kerää henkilöiden nimet Asiakkaat -taulukosta ja yhdistää nimet Toimittajat -taulukon nimiin. Jos haluat seurata mukana, suorita nämä toimenpiteet omassa Northwind-esimerkkitietokannassasi.

Selaimesi ei tue videotoimintoa. Asenna Microsoft Silverlight, Adobe Flash Player tai Internet Explorer 9.

Seuraavassa ovat tämän esimerkin rakentamiseen välttämättömät toimet:

  1. Luo kaksi valintakyselyä, Kysely1 ja Kysely2, joiden tietolähteinä toimivat vastaavasti Asiakkaat- ja Toimittajat-taulukot. Käytä Etunimi- ja Sukunimi-kenttiä näyttöarvoina.

  2. Luo uusi kysely, Kysely3, jolla ei aluksi ole tietolähdettä, ja tee tästä kyselystä sitten yhdistämiskysely napsauttamalla Yhdistämiskysely -komentoa Rakenne-välilehdessä.

  3. Kopioi ja liitä Kysely1:n ja Kysely2:n SQL-lausekkeet Kysely3:een. Muista poistaa ylimääräinen puolipiste ja lisätä avainsana UNION. Voit sitten tarkistaa tuloksesi taulukkonäkymässä.

  4. Lisää yhteen kyselyistä järjestämislauseke ja liitä sitten ORDER BY -lauseke yhdistämiskyselyn SQL-näkymään. Huomaa, että Kysely3:ssa, yhdistämiskyselyssä, tulee ennen järjestämisen liittämistä poistaa ensin puolipisteet ja sitten taulukon nimi kenttien nimistä.

  5. Lopullinen SQL, joka yhdistää ja lajittelee nimet tätä yhdistämiskyselyä varten, on seuraava:

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

Jos olet hyvin tottunut kirjoittamaan SQL-syntaksia, voit varmasti kirjoittaa oman SQL-lausekkeesi yhdistämiskyselyä varten suoraan SQL-näkymään. Voi kuitenkin olla hyödyllistä kopioida ja liittää SQL:ää muista kyselyobjekteista. Kyselyt voivat olla hyvinkin paljon mutkikkaampia kuin tässä käytetyt yksinkertaiset valintakyselyesimerkit. Voi olla edullista luoda ja testata kukin kysely huolella etukäteen ennen niiden yhdistämistä yhdistämiskyselyksi. Jos yhdistämiskysely ei toimi, voit muokata kumpaakin kyselyä erikseen, kunnes se onnistuu, ja rakentaa sitten uudelleen yhdistämiskyselysi korjatun syntaksin avulla.

Tutustumalla tämän artikkelin jäljellä oleviin osiin saat lisää vihjeitä ja ohjeita yhdistämiskyselyjen käytöstä.

Edellisen osion Northwind-tietokantaa käyttävässä esimerkissä yhdistetään tietoa vain kahdesta taulukosta. Voit kuitenkin yhdistää kolme tai enemmän taulukoita yhdistämiskyselyksi hyvin helposti. Edelliseen esimerkkiin viitaten: haluat ehkä sisällyttää myös työntekijöiden nimet kyselyn tuloksiin. Voit tehdä tämän lisäämällä kolmannen kyselyn ja yhdistämällä edelliseen SQL-lausekkeeseen ylimääräisen UNION-avainsanan tällä tavalla:

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

Kun tarkastelet tulosta taulukkonäkymässä, kaikki työntekijät luetteloidaan saman yritysnimen yhteydessä, mikä ei välttämättä ole kovin hyödyllistä. Jos haluat kentän ilmaisevan, onko joku oman yrityksen, toimittajan tai asiakasyrityksen työntekijä, voit käyttää kiinteää arvoa yrityksen nimen sijasta. SQL voi silloin näyttää tältä:

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

Tältä tulos näyttää taulukkonäkymässä. Access näyttää nämä viisi esimerkkitietuetta:

Työ

Sukunimi

Etunimi

Oman yrityksen työntekijä

Falk

Nina

Oman yrityksen työntekijä

Jussila

Laura

Toimittaja

Karvinen

Tommi

Asiakas

Seppänen

Harri

Asiakas

Nieminen

Anttoni

Yllä olevaa kyselyä voi pienentää ennestään, koska Access lukee tuloskenttien nimet vain yhdistämiskyselyn ensimmäisestä kyselystä. Tästä näet, että olemme poistaneet toisen ja kolmannen osakyselyn tulokset:

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-yhdistämiskyselyissä järjestäminen sallitaan vain kerran, mutta jokainen kysely voidaan suodattaa erikseen. Viittauksena edellisen osan yhdistämiskyselyyn: tässä on esimerkki, jossa olemme suodattaneet jokaisen kyselyn lisäämällä WHERE-lauseen.

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

Vaihtamalla taulukkonäkymään saat tämän tapaisia tuloksia:

Työ

Sukunimi

Etunimi

Toimittaja

Andersson

Liisa A.

Oman yrityksen työntekijä

Falk

Nina

Asiakas

Hasselberg

Jonas

Oman yrityksen työntekijä

Heinä-Laaksonen

Anne

Toimittaja

Hermunen-Kosonen

Anneli

Asiakas

Mårtensson

Sven

Toimittaja

Sandberg

Mikael

Toimittaja

Varvikko

Tanja

Oman yrityksen työntekijä

Viljanen

Teemu

Toimittaja

Valtanen

Kaija

Oman yrityksen työntekijä

Saari

Roope

Jos yhdistetyt kyselyt ovat hyvin erilaisia, saatat joutua tilanteeseen, jossa tuloskenttään on yhdistettävä useita eri tietotyyppejä. Jos näin käy, yhdistämiskysely antaa tulokset tekstimuodossa, koska tämä tietotyyppi voi sisältää sekä tekstiä että lukuja.

Tämän havainnollistamiseksi käytämme Northwind-esimerkkitietokannan Tuotetapahtumat -yhdistämiskyselyä. Avaa esimerkkitietokanta ja avaa sitten Tuotetapahtumat-kysely taulukkonäkymässä. Viimeisten kymmenen tietueen pitäisi olla samankaltaisia kuin tämä tulos:

Tuotetunnus

Tilauksen päivämäärä

Yrityksen nimi

Tapahtuma

Määrä

77

22.1.2006

Toimittaja B

Ostaminen

60

80

22.1.2006

Toimittaja D

Ostaminen

75

81

22.1.2006

Toimittaja A

Ostaminen

125

81

22.1.2006

Toimittaja A

Ostaminen

200

7

20.1.2006

Yritys D

Myynti

10

51

20.1.2006

Yritys D

Myynti

10

80

20.1.2006

Yritys D

Myynti

10

34

15.1.2006

Yritys AA

Myynti

100

80

15.1.2006

Yritys AA

Myynti

30

Oletetaan,että haluat jakaa Määrä-kentän kahtia: Osta ja Myy. Oletetaan myös, että haluat määrittää kiinteän nolla-arvon kentälle ilman arvoa. Tältä näyttää tämän yhdistämiskyselyn 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; 

Jos vaihdat taulukkonäkymään, näet viimeiset kymmenen näytettävää tietuetta näin:

Tuotetunnus

Tilauksen päivämäärä

Yrityksen nimi

Tapahtuma

Osta

Myy

74

22.1.2006

Toimittaja B

Ostaminen

20

0

77

22.1.2006

Toimittaja B

Ostaminen

60

0

80

22.1.2006

Toimittaja D

Ostaminen

75

0

81

22.1.2006

Toimittaja A

Ostaminen

125

0

81

22.1.2006

Toimittaja A

Ostaminen

200

0

7

20.1.2006

Yritys D

Myynti

0

10

51

20.1.2006

Yritys D

Myynti

0

10

80

20.1.2006

Yritys D

Myynti

0

10

34

15.1.2006

Yritys AA

Myynti

0

100

80

15.1.2006

Yritys AA

Myynti

0

30

Jatketaan samaa esimerkkiä: entä jos haluat nollan sisältävien kenttien olevan tyhjiä? Voit muokata SQL:n näyttämään tyhjää nollan sijasta käyttämällä seuraavalla tavalla avainsanaa 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;

Kuitenkin, kuten olet ehkä jo huomannut vaihtaessasi taulukkonäkymään, saat nyt odottamattoman tuloksen. Osta-sarakkeen kaikki kentät poistetaan:

Tuotetunnus

Tilauksen päivämäärä

Yrityksen nimi

Tapahtuma

Osta

Myy

74

22.1.2006

Toimittaja B

Ostaminen

77

22.1.2006

Toimittaja B

Ostaminen

80

22.1.2006

Toimittaja D

Ostaminen

81

22.1.2006

Toimittaja A

Ostaminen

81

22.1.2006

Toimittaja A

Ostaminen

7

20.1.2006

Yritys D

Myynti

10

51

20.1.2006

Yritys D

Myynti

10

80

20.1.2006

Yritys D

Myynti

10

34

15.1.2006

Yritys AA

Myynti

100

80

15.1.2006

Yritys AA

Myynti

30

Tämä johtuu siitä, että Access määrittää tietotyypit ensimmäisen kyselyn kenttien mukaan. Tässä esimerkissä Null ei ole luku.

Mitä tapahtuu, jos yrität lisätä tyhjän merkkijonon kenttiin, joiden arvo on tyhjä? Tällöin SQL voi näyttää tältä:

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;

Kun siirryt taulukkonäkymään, näet, että Access hakee Osta-arvot, mutta muuttaa ne tekstiksi. Näet, että nämä ovat tekstiarvoja, koska ne tasataan taulukkonäkymässä vasemmalle. Ensimmäisen kyselyn tyhjä merkkijono ei ole luku, ja tämän takia näet nämä tulokset. Huomaat senkin, että myös Myy-arvot muunnetaan tekstimuotoon, koska ostamistietueet sisältävät tyhjän merkkijonon.

Tuotetunnus

Tilauksen päivämäärä

Yrityksen nimi

Tapahtuma

Osta

Myy

74

22.1.2006

Toimittaja B

Ostaminen

20

77

22.1.2006

Toimittaja B

Ostaminen

60

80

22.1.2006

Toimittaja D

Ostaminen

75

81

22.1.2006

Toimittaja A

Ostaminen

125

81

22.1.2006

Toimittaja A

Ostaminen

200

7

20.1.2006

Yritys D

Myynti

10

51

20.1.2006

Yritys D

Myynti

10

80

20.1.2006

Yritys D

Myynti

10

34

15.1.2006

Yritys AA

Myynti

100

80

15.1.2006

Yritys AA

Myynti

30

Miten tämä ongelma siis ratkaistaan?

Yksi mahdollisuus on pakottaa kysely olettamaan, että kentän arvo on luku. Tämä voidaan tehdä seuraavalla lausekkeella:

IIf(False, 0, Null)

Tarkistettava ehto, Epätosi, ei koskaan ole Tosi, joten lauseke palauttaa aina arvon Null, mutta Access arvioi silti molemmat tulosvaihtoehdot ja määrittää tulokseksi joko numeroarvon tai Null-arvon.

Näin voimme käyttää tätä lauseketta käyttöesimerkissämme:

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;

Huomaa, ettei toista kyselyä ole välttämätöntä muokata.

Jos vaihdat taulukkonäkymään, saamme haluamamme tuloksen:

Tuotetunnus

Tilauksen päivämäärä

Yrityksen nimi

Tapahtuma

Osta

Myy

74

22.1.2006

Toimittaja B

Ostaminen

20

77

22.1.2006

Toimittaja B

Ostaminen

60

80

22.1.2006

Toimittaja D

Ostaminen

75

81

22.1.2006

Toimittaja A

Ostaminen

125

81

22.1.2006

Toimittaja A

Ostaminen

200

7

20.1.2006

Yritys D

Myynti

10

51

20.1.2006

Yritys D

Myynti

10

80

20.1.2006

Yritys D

Myynti

10

34

15.1.2006

Yritys AA

Myynti

100

80

15.1.2006

Yritys AA

Myynti

30

Vaihtoehtoinen tapa päästä samaan tulokseen on lisätä yhdistämiskyselyn osakyselyiden eteen vielä yksi kysely:

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 palauttaa määrittelemäsi tietotyypin kiinteän arvon kullekin kentälle. Et tietenkään halua tämän kyselyn tuloksen sotkevan tuloksia, ja tämän vältät lisäämällä Epätoteen WHERE-lauseen:

WHERE False

Tämä on pikkuista huiputusta, sillä tämä on aina epätosi eikä kysely tällöin palauta mitään. Kun tämä lauseke yhdistetään aiemmin luotuun SQL:ään, saadaan seuraavanlainen kokonaislauseke:

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;

Huomautus: Tämä esimerkissä esiintyvä yhdistetty kysely palauttaa Northwind-tietokantaa käytettäessä 100 tietuetta, kun taas yksittäiset kyselyt palauttavat 58 ja 43 tietuetta, yhteensä 101 tietuetta. Ero johtuu siitä, että kaksi tietuetta ei ole yksilöllisiä. Katso osaa Erillisten tietueiden käyttäminen yhdistämiskyselyissä UNION ALLin avulla, niin saat tietää, miten voit ratkaista tämän tilanteen käyttämällä UNION ALLia.

Yhdistämiskyselyn erikoistapauksessa yhdistetään joukko tietueita yhteen tietueeseen, joka sisältää yhden tai useamman kentän summan.

Tässä on toinen esimerkki, jonka voit luoda Northwind-esimerkkitietokannassa havainnollistamaan sitä, miten yhdistämiskyselyssä saadaan summa.

  1. Luo uusi yksinkertainen kysely ja tarkastele sen avulla oluen ostamista (tuotetunnus 34 Northwind-tietokannassa) käyttämällä seuraavaa SQL-syntaksia:

    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. Siirtymällä taulukkonäkymään sinun pitäisi nähdä neljä ostoa:

    Vastaanottopäivämäärä

    Määrä

    22.1.2006

    100

    22.1.2006

    60

    4.4.2006

    50

    5.4.2006

    300

  3. Kun haluat saada summan, luo yksinkertainen yhdistävä kysely käyttämällä seuraavaa SQL:ää:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Siirtymällä taulukkonäkymään sinun pitäisi nähdä vain yksi tietue:

    MaxOfDate Received

    SumOfQuantity

    5.4.2006

    510

  5. Yhdistämällä nämä kaksi kyselyä yhdistämiskyselyyn voit lisätä tietueen, joka sisältää ostamistietueiden määrien summan:

    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. Siirtymällä taulukkonäkymään sinun pitäisi nähdä kaikki neljä ostoa niin, että jokaisen summaa seuraa kokonaissummatietue:

    Vastaanottopäivämäärä

    Määrä

    22.1.2006

    60

    22.1.2006

    100

    4.4.2006

    50

    5.4.2006

    300

    5.4.2006

    510

Tässä olemme käsitelleet perustiedot summien lisäämisestä yhdistämiskyselyyn. Haluat ehkä myös sisällyttää molempiin kyselyihin kiinteitä arvoja, kuten ”Yksittäinen” ja ”Kokonaissumma” summatietueen erottamiseksi muista tietueista. Voit kerrata kiinteiden arvojen käyttöä kohdassa Kolmen tai useamman taulukon tai kyselyn yhdistäminen yhdistämiskyselyssä.

Accessin yhdistämiskyselyt sisältävät oletusarvoisesti vain erillisiä tietueita. Mutta entä jos haluat sisällyttää kaikki tietueet? Kannattaa ottaa tässä esille uusi esimerkki.

Edellisessä osassa näytimme, miten voit luoda kokonaissumman yhdistämiskyselyssä. Muokkaa tämän yhdistämiskyselyn SQL:ää niin, että siihen sisältyy tuotetunnus 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];

Siirtymällä taulukkonäkymään sinun pitäisi nähdä hieman harhaanjohtava tulos:

Vastaanottopäivämäärä

Määrä

22.1.2006

100

22.1.2006

200

Yksi tietue ei tietenkään palauta kokonaismäärää kaksinkertaisena.

Näet tämän tuloksen siksi, että yhtenä päivänä sama suklaamäärä on myyty kahdesti - kuten ostotilaustietojen taulukkoon on merkitty. Tässä on yksinkertainen valintakyselytulos, joka näyttää molemmat tietueet Northwind-esimerkkitietokannasta:

Ostotilaustunnus

Tuote

Määrä

100

Northwind Traders Chocolate

100

92

Northwind Traders Chocolate

100

Edellä mainitussa yhdistämiskyselyssä näet, että ostotilaustunnuksen kenttää ei ole mukana ja että kaksi kenttää eivät ole kaksi erillistä tietuetta.

Jos haluat sisällyttää kaikki tietueet, käytä SQL:ssäsi avainsanaa UNION ALL pelkän UNIONin sijasta. Tämä vaikuttaa todennäköisesti tulosten lajitteluun, joten voi olla järkevää sisällyttää myös ORDER BY -lause lajittelujärjestyksen määrittämiseksi. Tässä on edelliseen esimerkkiin perustuva muokattu 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];

Siirtymällä taulukkonäkymään sinun pitäisi nähdä kaikki yksittäiset kohteet sekä viimeisenä tietueena kokonaissumma:

Vastaanottopäivämäärä

Summa

Määrä

22.1.2006

100

22.1.2006

100

22.1.2006

Summa

200

Yleinen tapa käyttää yhdistämiskyselyä on käyttää sitä tietuelähteenä lomakkeen yhdistelmäruudun ohjausobjektille. Yhdistelmäruutua käyttäen voit valita arvon lomakkeen tietueiden suodattamista varten. Voit esimerkiksi suodattaa työntekijöiden tietueet heidän kaupunkinsa mukaan.

Tarkastele tätä esimerkkiä, jonka voit luoda Northwind-esimerkkitietokannassa tämän tilanteen havainnollistamiseksi.

  1. Luo yksinkertainen valintakysely tätä SQL-syntaksia käyttämällä:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Siirtymällä taulukkonäkymään sinun pitäisi nähdä seuraavat tulokset:

    Kaupunki

    Suodatin

    Vaasa

    Vaasa

    Kotka

    Kotka

    Turku

    Turku

    Tampere

    Tampere

    Vaasa

    Vaasa

    Turku

    Turku

    Vaasa

    Vaasa

    Turku

    Turku

    Vaasa

    Vaasa

  3. Nämä tulokset eivät ehkä näytä kovin arvokkailta. Laajenna kuitenkin kyselyä ja muuta se yhdistämiskyselyksi käyttämällä seuraavaa SQL:ää:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Siirtymällä taulukkonäkymään sinun pitäisi nähdä seuraavat tulokset:

    Kaupunki

    Suodatin

    <Kaikki>

    *

    Kotka

    Kotka

    Tampere

    Tampere

    Turku

    Turku

    Vaasa

    Vaasa

    Access suorittaa yhdeksän edellä näytetyn tietueen yhdistämiskyselyn käyttämällä kiinteitä kenttäarvoja <Kaikki> ja ”*”.

    Koska tämä yhdistämiskyselylause ei sisällä avainsanaa UNION ALL, Access palauttaa vain erilliset tietueet, mikä tarkoittaa, että jokainen kaupunki palautetaan vain kerran kiinteine, samanlaisine arvoineen.

  5. Nyt kun sinulla on valmis yhdistämiskysely, joka näyttää jokaisen kaupungin nimen vain kerran, sekä asetus, joka käytännössä valitsee kaikki kaupungit, voit käyttää tätä kyselyä tietuelähteenä lomakkeen yhdistelmäruudulle. Käyttämällä tätä erityisesimerkkiä mallina voit luoda lomakkeelle yhdistelmäruudun ohjausobjektin, määrittää tämän kyselyn sen tietuelähteeksi, määrittää Suodatin-sarakkeen sarakkeenleveysominaisuuden malliksi 0 (nolla) sen piilottamiseksi katseilta ja määrittää Sidottu sarake -ominaisuuden arvoksi 1 toisen sarakkeen indeksin. Lomakkeen oman suodatinominaisuuden kautta voit sitten lisätä esimerkiksi seuraavanlaisen koodin lomakkeen suodattimen aktivoimiseksi käyttämällä yhdistelmäruudun ohjausobjektissa valittua arvoa:

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

    Lomakkeen käyttäjä voi sitten suodattaa lomaketietueet, joissa on tietyn kaupungin nimi, tai valita <Kaikki> ja luetteloida kaikkien kaupunkien tietueet.

Sivun alkuun

Tarvitsetko lisäohjeita?

Haluatko lisää vaihtoehtoja?

Tutustu tilausetuihin, selaa harjoituskursseja, opi suojaamaan laitteesi ja paljon muuta.

Osallistumalla yhteisöihin voit kysyä kysymyksiä ja vastata niihin, antaa palautetta sekä kuulla lisää asiantuntijoilta, joilla on runsaasti tietoa.