Useiden kyselyjen yhdistäminen yhdeksi tulokseksi yhdistämiskyselyn avulla

Käytetään kohteeseen
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Joskus haluat ehkä yhdistää yhden taulukon tai kyselyn tietueet yhden tai useamman muun taulukon tietueisiin yhdeksi tulokseksi. Näin yhdistämiskysely tekee Accessissa.

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 aiemmin luonut yhdistämiskyselyä, kannattaa tutustua ensin toimivaan esimerkkiin Northwind Access -mallissa. Voit etsiä Northwind-mallimallia Accessin aloitussivulta valitsemalla Tiedosto>uusi. Voit myös ladata kopion suoraan Northwind-mallimallista.

Kun Access avaa Northwind-tietokannan, sulje ensin näkyviin tuleva kirjautumisvalintaikkuna ja laajenna sitten siirtymisruutua. Valitse siirtymisruudun yläreuna ja järjestä kaikki tietokantaobjektit tyypin mukaan valitsemalla Objektityyppi . 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 tavalliset valinta- ja toimintokyselyt, taulukot eivät liity yhdistämiskyselyyn. Tämä tarkoittaa, että et voi käyttää Accessin graafisen kyselyn suunnittelutyökalua yhdistämiskyselyjen luomiseen tai muokkaamiseen. Jos avaat yhdistämiskyselyn siirtymisruudusta, Access avaa sen ja näyttää tulokset taulukkonäkymässä. Huomaa Aloitus-välilehdenNäkymät-kohdassa, että rakennenäkymä ei ole käytettävissä, kun käsittelet yhdistämiskyselyitä. Voit vaihtaa vain taulukkonäkymän ja SQL-näkymän välillä.

Jos haluat jatkaa tämän yhdistämiskyselyn esimerkin tutkimista, valitseAloitusnäkymät>>SQL-näkymä, niin näet SQL sen määrittävän syntaksin. Tässä kuvassa olemme lisänneet ylimääräisiä välistysvälejä SQL , jotta näet helposti eri osat, jotka muodostavat yhdistämiskyselyn.

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


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 lausekkeen UNION toinen osa SQL on avainsana, joka kehottaa Accessia yhdistämään nämä kaksi tietuejoukkoa.

Tämän SQL lausekkeen viimeinen osa määrittää yhdistettyjen tietueiden järjestyksen lausekkeen ORDER BY avulla. Tässä esimerkissä Access tilaa 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 syntaksin SQL suoraan SQL View'ssa, sen luominen osiin valintakyselyiden avulla voi olla helpompaa. 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 valintakyselyt, ne on aika yhdistää. 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 rakenneikkunan ja näyttää SQL View - objektivälilehden. Tässä vaiheessa välilehti on tyhjä.
  3. Napsauta ensimmäisen yhdistämiskyselyyn lisättävän valintakyselyn välilehteä.
  4. Valitse Aloitus-välilehdessäNäytä>SQL-näkymä.
  5. Kopioi valintakyselyn SQL lauseke. Napsauta sen yhdistämiskyselyn välilehteä, jota aloit luoda aikaisemmin.
  6. Liitä valintakyselyn SQL lauseke yhdistämiskyselyn SQL View - objektivälilehteen.
  7. Poista puolipiste (;) valintakyselylausekkeen SQL lopusta.
  8. Siirrä kohdistinta yhden rivin alaspäin painamalla Enter-näppäintä ja kirjoita UNION sitten uudelle riville.
  9. Napsauta seuraavan yhdistämiskyselyyn lisättävän valintakyselyn välilehteä.
  10. Toista vaiheet 5–10, kunnes olet kopioinut ja liittänyt kaikki SQL valintakyselyjen lausekkeet yhdistämiskyselyn SQL View - ikkunaan. Älä poista puolipistettä tai kirjoita mitään viimeisen valintakyselyn lausekkeen SQL jälkeen.
  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 uudelleen Northwind-mallitietokannassa. 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.

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ä UNION avainsana. Voit sitten tarkistaa tuloksesi taulukkonäkymässä.

  4. Lisää tilauslauseke johonkin kyselystä ja liitä ORDER BY lauseke sitten SQL View'n yhdistämiskyselyyn. 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 tämän yhdistämiskyselyesimerkin nimet, 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 haluat kirjoittaa SQL syntaksin, voit kirjoittaa oman SQL lausekkeen yhdistämiskyselyä varten suoraan SQL View'ssa. 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ä.

Kolmen tai useamman taulukon tai kyselyn yhdistäminen yhdistämiskyselyssä

Northwind-tietokantaa käyttävän edellisen osan esimerkissä vain kahden taulukon tiedot yhdistetään. 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 näkyvät malliyrityksen nimen kanssa, mikä ei todennäköisesti ole kovin hyödyllistä. Jos haluat kentän näyttävän, onko henkilö yrityksen sisäinen työntekijä, toimittaja vai asiakas, voit lisätä kiinteän arvon yrityksen nimen sijaan. Näyttää tältä 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];

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

Voit pienentää kyselyä entisestään, koska Access lukee tuloskenttien nimet vain yhdistämiskyselyn ensimmäisestä kyselystä. Tässä toisen ja kolmannen kyselyn osien tulos poistetaan:


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

Suodattaminen yhdistämiskyselyissä

Access-yhdistämiskyselyssä järjestys sallitaan vain kerran, mutta voit suodattaa kunkin kyselyn yksitellen. Edellisen osan yhdistämiskyselyn perusteella tässä on esimerkki, joka suodattaa jokaisen kyselyn lisäämällä lauseen 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];

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

Tietotyyppien sekoittaminen

Jos yhdistämiesi kyselyjen tiedot ovat hyvin erilaisia, saatat kohdata tilanteen, jossa tuloskentän on yhdistettävä eri tietotyyppejä olevia tietoja. 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 kahteen kenttään: Osta ja myy. Oletetaan myös, että haluat kiinteän nolla-arvon kentälle, jolla ei ole arvoa. SQL Tältä näyttää tässä yhdistämiskyselyssä:

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

Jos jatkat tätä esimerkkiä, entä jos haluat nolla-arvojen kenttien olevan tyhjiä? Voit muokata sitä niin, SQL että se ei näytä mitään nollan Null sijaan lisäämällä avainsanan, kuten tässä on esitetty:

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 kenttien tyhjään arvoon? Tämä SQL yritys 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 ratkaisu on pakottaa kysely odottamaan kentän arvon olevan luku. Voit tehdä tämän tällä lausekkeella:


IIf(False, 0, Null)

Tarkistettava Falseehto ei ole koskaan True, joten lauseke palauttaa Nullaina . Access kuitenkin arvioi edelleen sekä tulostusasetukset että käsittelee tulosta numeerisena tai Null.

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;

Toista kyselyä ei tarvitse 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 pieni temppu. Koska ehto on aina epätosi, kysely ei 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ässä esimerkissä Northwind-tietokannan yhdistetty kysely palauttaa 100 tietuetta, kun taas kaksi yksittäistä kyselyä palauttavat 58 ja 43 tietuetta yhteensä 101 tietueelle. Tämä ero johtuu siitä, että kaksi tietuetta eivät ole yksilöllisiä. Tutustu artikkeliin Erillisten tietueiden käsitteleminen yhdistämiskyselyissä KÄYTTÄMÄLLÄ UNION ALL -toimintoa, jotta opit ratkaisemaan tämän skenaarion käyttämällä UNION ALL.

Summien lisääminen yhdistämiskyselyyn

Yhdistämiskyselyn erikoiskäyttö on tietuejoukon yhdistäminen 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ää kiinteät arvot molempiin kyselyihin, kuten "Tiedot" ja "Summa", jotta kokonaistietue erotetaan visuaalisesti muista tietueista. Voit kerrata kiinteiden arvojen käyttöä kohdassa Kolmen tai useamman taulukon tai kyselyn yhdistäminen yhdistämiskyselyssä.

Erillisten tietueiden käyttö yhdistämiskyselyissä UNION ALLia käyttäen

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 yhdistämiskyselyä SQL niin, että se sisältää Product ID = 48seuraavat:


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 kaksinkertaista kokonaismäärää.

Näet tämän tuloksen, koska yhtenä päivänä sama määrä suklaata myytiin kahdesti, kuten Ostotilauksen tiedot -taulukossa on kirjattu. 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

Aiemmin mainitussa yhdistämiskyselyssä näet, että Ostotilaustunnus-kenttää ei sisällytetä ja että nämä kaksi kenttää eivät muodosta kahta erillistä tietuetta.

Jos haluat sisällyttää kaikki tietueet, käytä sitä UNION ALL sen sijaan UNION , että käyttäisit SQL. Tämä vaikuttaa todennäköisesti tulosten lajitteluun, joten haluat ehkä sisällyttää myös lausekkeen ORDER BY lajittelujärjestyksen määrittämistä varten. Tässä on edellisen esimerkin perusteella 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

Yhdistämiskyselyn käyttäminen lomakkeen tietueiden suodattamiseen yhdistelmäruudun ohjausobjektin avulla

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. Yksinkertaisen valintakyselyn luominen tämän SQL syntaksin avulla:

    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 kyselyä ja muuta se yhdistämiskyselyksi seuraavasti 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 aiemmin näytetyn tietueen yhdistämisen, jonka kiinteät kenttäarvot ovat <Kaikki> ja "*". Koska tämä yhdistämislauseke ei sisällä UNION ALL, Access palauttaa vain erilliset tietueet. Tämä tarkoittaa, että jokainen kaupunki palautetaan vain kerran kiinteillä identtisillä arvoilla.

  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. Filter Voit sitten lisätä lomakkeen ominaisuuteen seuraavan kaltaisen koodin lomakesuodattimen aktivoimiseksi käyttämällä yhdistelmäruutuohjausobjektissa valittua arvoa:

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

    Lomakkeen käyttäjä voi sitten suodattaa lomaketietueet tiettyyn kaupungin nimeen tai valita <Kaikki> kaikkien kaupunkien kaikkien tietueiden luetteloksi.

Sivun alkuun