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:
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.
- Valitse Luo-välilehden Kyselyt-ryhmässä Kyselyn rakennenäkymä.
- Kaksoisnapsauta taulukkoa, joka sisältää sisällytettävät kentät. Järjestelmä lisää taulukon kyselyn suunnitteluikkunaan.
- 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.
- Vaihtoehtoisesti voit lisätä ehtoja kenttiin kirjoittamalla tarvittavat lausekkeet kenttäruudukon Ehdot-riville.
- 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.
- Siirry kyselyn rakennenäkymään.
- Tallenna valintakysely ja jätä se avatuksi.
- 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.
- Valitse Luo-välilehden Kyselyt-ryhmässä Kyselyn rakennenäkymä.
- 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ä.
- Napsauta ensimmäisen yhdistämiskyselyyn lisättävän valintakyselyn välilehteä.
- Valitse Aloitus-välilehdessäNäytä>SQL-näkymä.
- Kopioi valintakyselyn
SQLlauseke. Napsauta sen yhdistämiskyselyn välilehteä, jota aloit luoda aikaisemmin. - Liitä valintakyselyn
SQLlauseke yhdistämiskyselyn SQL View - objektivälilehteen. - Poista puolipiste (
;) valintakyselylausekkeenSQLlopusta. - Siirrä kohdistinta yhden rivin alaspäin painamalla Enter-näppäintä ja kirjoita
UNIONsitten uudelle riville. - Napsauta seuraavan yhdistämiskyselyyn lisättävän valintakyselyn välilehteä.
- Toista vaiheet 5–10, kunnes olet kopioinut ja liittänyt kaikki
SQLvalintakyselyjen lausekkeet yhdistämiskyselyn SQL View - ikkunaan. Älä poista puolipistettä tai kirjoita mitään viimeisen valintakyselyn lausekkeenSQLjälkeen. - 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:
Luo kaksi valintakyselyä, Kysely1 ja Kysely2, joiden tietolähteinä toimivat vastaavasti Asiakkaat- ja Toimittajat-taulukot. Käytä Etunimi- ja Sukunimi-kenttiä näyttöarvoina.
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ä.
Kopioi ja liitä Kysely1:n ja Kysely2:n SQL-lausekkeet Kysely3:een. Muista poistaa ylimääräinen puolipiste ja lisätä
UNIONavainsana. Voit sitten tarkistaa tuloksesi taulukkonäkymässä.Lisää tilauslauseke johonkin kyselystä ja liitä
ORDER BYlauseke 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ä.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.
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];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 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))Siirtymällä taulukkonäkymään sinun pitäisi nähdä vain yksi tietue:
MaxOfDate Received SumOfQuantity 5.4.2006 510 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];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.
Yksinkertaisen valintakyselyn luominen tämän
SQLsyntaksin avulla:SELECT Employees.City, Employees.City AS Filter FROM Employees;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 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;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.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.
FilterVoit 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 = TrueLomakkeen käyttäjä voi sitten suodattaa lomaketietueet tiettyyn kaupungin nimeen tai valita <Kaikki> kaikkien kaupunkien kaikkien tietueiden luetteloksi.
Sivun alkuun