Bruke en unionsspørring til å kombinere flere spørringer inn i ett enkelt resultat

Gjelder for
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Noen ganger vil du kanskje kombinere poster fra én tabell eller spørring med poster fra én eller flere andre tabeller til ett enkelt resultat. Det er det unionsspørring gjør i Access.

For at du skal forstå unionsspørring, bør du først gjøre deg kjent med å utforme grunnleggende utvalgsspørringer i Access. Hvis du vil finne ut mer om utforming av utvalgsspørringer, kan du se Opprette en enkel utvalgsspørring.

Utforske et eksempel på en fungerende unionsspørring

Hvis du noen gang har opprettet en unionsspørring tidligere, kan det hjelpe å først studere et fungerende eksempel i Northwind-malen i Access. Du kan søke etter Northwind-eksempelmalen på Kom i gang-siden i Access ved å velge Ny fil>. Du kan også laste ned en kopi direkte fra eksempelmalen for Northwind.

Etter at Access åpner Gastronor-databasen, avviser du dialogboksen for pålogging som vises først, og deretter utvider du navigasjonsruten. Velg toppen av navigasjonsruten, og velg deretter Objekttype for å organisere alle databaseobjekter etter type. Deretter utvider du Spørringer-gruppen , og du vil se en spørring kalt Produkttransaksjoner.

Unionsspørringer er enkle å skille fra andre spørringsobjekter fordi de har et spesialikon som ligner på to sammenflettede sirkler, som representerer et forenet sett fra to ulike sett:

Skjermbilde av unionsspørring-ikonet i Access. I motsetning til vanlige utvalgs- og handlingsspørringer er ikke tabeller relatert i en unionsspørring. Det betyr at du ikke kan bruke den grafiske spørringsutformingen for Access til å bygge eller redigere unionsspørringer. Hvis du åpner en unionsspørring fra navigasjonsruten, åpnes den i Access, og resultatene vises i dataarkvisning. Legg merke til at utformingsvisning ikke er tilgjengelig når du arbeider med unionsspørringer, under VisningerHjem-fanen. Du kan bare bytte mellom Dataarkvisning og SQL-visning.

Hvis du vil fortsette utforskingen av eksemplet på unionsspørring, klikker du påSQL-visning>> for hjemvisninger for å vise syntaksen SQL som definerer den. I denne illustrasjonen har vi lagt til litt ekstra mellomrom slik SQL at du enkelt kan de se ulike delene som utgjør en unionsspørring.

La oss se på syntaksen for denne unionsspørringen fra Northwind-databasen SQL i detalj:


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;

Den første og tredje delen av denne SQL-setningen er i hovedsak to utvalgsspørringer. Disse spørringene henter to forskjellige sett med poster: ett sett fra tabellen Produktordrer og et annet sett fra tabellen Produktkjøp.

Den andre delen av denne SQL setningen er nøkkelordet UNION , som forteller Access å kombinere disse to settene med poster.

Den siste delen av denne SQL setningen fastslår rekkefølgen av de kombinerte postene ved å bruke en ORDER BY setning. I dette eksemplet sorteres alle poster etter Ordredato-feltet i synkende rekkefølge.

Obs!

Unionsspørringer er alltid skrivebeskyttet i Access, du kan ikke endre noen verdier i dataarkvisning.

Opprette en unionsspørring ved å opprette og kombinere utvalgsspørringer

Selv om du kan opprette en unionsspørring ved å skrive syntaksen SQL direkte i SQL-visning, kan det hende det er enklere å bygge den opp ved bruk av utvalgsspørringer. Du kan deretter kopiere og lime inn SQL-delene i en kombinert unionsspørring.

Hvis du vil hoppe over instruksjonene om trinnene og heller se et eksempel, kan du lese den neste inndelingen Se et eksempel på hvordan du bygger en unionsspørring.

  1. Klikk Spørringsutforming i Spørringer-gruppen i kategorien Opprett.
  2. Dobbeltklikk på tabellen som inneholder feltene du vil ta med. Tabellen legges til i utformingsvisningen for spørringen.
  3. I utformingsvisningen for spørringen dobbeltklikker du hvert av feltene du vil ta med. Når du velger felt, må du påse at du legger til samme antall felt som du legger til i de andre utvalgsspørringene og at feltene står i samme rekkefølge. Følg svært nøye med på datatypene til feltene, og påse at de har datatyper som er kompatible med feltene i samme posisjon i de andre spørringene du kombinerer. Hvis den første utvalgsspørringen for eksempel har fem felt, der det første inneholder dato-/klokkeslettdata, må du påse at hver av de andre utvalgsspørringene som du kombinerer, også har fem felt, der det første inneholder dato-/klokkeslettdata, og så videre.
  4. Hvis du ønsker det, kan du legge til vilkår i feltene ved å skrive de aktuelle uttrykkene i Vilkår-raden i feltrutenettet.
  5. Etter at du er ferdig med å legge til felter og feltvilkår, kjører du utvalgsspørringen og ser gjennom utdataene. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.
  6. Bytt til utformingsvisning for spørringen.
  7. Lagre utvalgsspørringen, og la den stå åpen.
  8. Gjenta denne prosessen for hver av utvalgsspørringene du vil kombinere.

Nå som du har opprettet utvalgsspørringene, kan du kombinere dem. I dette trinnet oppretter du unionsspørringen ved å kopiere og lime inn SQL setningene.

  1. I fanen Opprett i gruppen Spørringer, klikker du på Spørreutforming.
  2. Klikk på Union i Spørring-gruppen på Utforming-fanen. Access skjuler spørringsutformingsvinduet og viser objektfanen SQL-visning . På dette tidspunktet er fanen tom.
  3. Klikk på fanen for den første utvalgsspørringen du vil kombinere i unionsspørringen.
  4. Klikk Vis>SQL-visning på Hjem-fanen.
  5. Kopier setningen SQL for utvalgsspørringen. Klikk på fanen for unionsspørringen som du begynte å opprette tidligere.
  6. Lim inn setningen SQL for utvalgsspørringen i objektkategorien SQL-visning i unionsspørringen.
  7. Slett semikolonet (;) på slutten av utvalgsspørringen SQL .
  8. Trykk på ENTER for å bevege markøren ned én linje, og skriv UNION deretter på den nye linjen.
  9. Klikk kategorien for den neste utvalgsspørringen som du vil kombinere i unionsspørringen.
  10. Gjenta trinn 5 til 10 til du har kopiert og limt inn alle setningene SQL for utvalgsspørringene i SQL-visningsvinduet i unionsspørringen. Ikke slett semikolonet eller skriv noe etter setningen SQL i den siste spørringen.
  11. Klikk Kjør i Resultater-gruppen i kategorien Utforming.

Resultatene av unionsspørringen vises i dataarkvisning.

Se et eksempel på hvordan du bygger en unionsspørring

Her er et eksempel du kan gjenskape i eksempeldatabasen for Northwind. Denne unionsspørringen samler inn navnene på personene fra tabellen Kunder og kombinerer dem med navnene på personene fra tabellen Leverandører. Hvis du vil følge med i denne opplæringen, går du gjennom trinnene i din kopi av eksempeldatabasen for Northwind.

Her ser du de nødvendige trinnene for å bygge dette eksemplet:

  1. Opprett to spørringer med navn Spørring1 og Spørring2 med henholdsvis tabellene Kunder og Leverandører som datakilder. Bruk Fornavn- og Etternavn-feltet som visningsverdier.

  2. Opprett en ny spørring med navn Spørring3 uten datakilde i utgangspunktet, og klikk deretter på kommandoen UnionUtforming-fanen for å gjøre denne spørringen til en unionsspørring.

  3. Kopier og lim inn SQL-setningene fra Spørring1 og Spørring2 i Spørring3. Sørg for at du fjerner det ekstra semikolonet og legger til nøkkelordet UNION . Du kan deretter se resultatene i dataarkvisningen.

  4. Legg til en ordresetning i én av spørringene, og lim deretter inn setningen ORDER BY i unionsspørringen i SQL-visning. Vær oppmerksom på følgende: når ordren endres i Spørring3, unionsspørringen, fjernes først semikolonet og deretter tabellnavnet fra feltnavnene.

  5. Finalen SQL som kombinerer og sorterer navnene for dette eksemplet på unionsspørring er følgende:

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

Hvis du har erfaring med å skrive SQL syntaks, kan du skrive dine egne SQL setninger for unionsspørringen direkte i SQL-visning. Det kan imidlertid være nyttig å følge fremgangsmåten der du kopierer og limer inn SQL-setninger fra andre spørringsobjekter. Hver spørring kan være enda mer komplisert enn de enkle eksemplene på utvalgsspørringer som er brukt her. Det kan være til din fordel å opprette og teste hver spørring nøye før du kombinerer dem i en unionsspørring. Hvis unionsspørringen ikke kjører, kan du justere hver spørring individuelt til den lykkes, og deretter kan du bygge unionsspørringen på nytt med den endrede syntaksen.

Se gjennom de gjenværende inndelingene i denne artikkelen for flere tips om hvordan du bruker unionsspørringer.

Kombinere tre eller flere tabeller eller spørringer i en unionsspørring

I eksemplet fra den forrige inndelingen som bruker Northwind-databasen, er data fra bare to tabeller kombinert. Du kan imidlertid kombinere tre eller flere tabeller på en enkel måte i en unionsspørring. Du kan for eksempel, ved å fortsette på det forrige eksemplet, inkludere navnen på de ansatte i spørringsutdataene. Dette gjør du ved å legge til en tredje spørring og kombinere den forrige SQL-setningen med et nytt UNION-nøkkelord som dette:


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

Når du viser resultatet i dataarkvisning, blir alle ansatte oppført med navnet på eksempelfirmaet, noe som nok ikke er nyttig i din situasjon. Hvis du vil at feltet skal vise om en person er en intern ansatt eller tilhører en leverandør eller kunde, kan du inkludere en fast verdi i stedet for firmanavnet. Slik ser den ut 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];

Slik vises resultatet i dataarkvisning. Access vises disse fem eksempelpostene:

Ansettelse Etternavn Fornavn
Internt Freehafer Nancy
Internt Giussani Laura
Leverandør Glasson Stuart
Kunde Goldschmidt Daniel
Kunde Gratacos Solsona Antonio

Du kan redusere spørringen ytterligere fordi Access bare leser navnene på utdatafeltene fra den første spørringen i en unionsspørring. Her fjernes utdataene fra inndelingene til andre og tredje spørring:


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

Filtrere i unionsspørringer

Bestilling er bare tillatt én gang i en unionsspørring i Access, men du kan filtrere hver spørring enkeltvis. Ved å fortsette på unionsspørringen fra forrige inndeling ser du her et eksempel som filtrerer hver spørring ved å legge til en WHERE setning.


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

Bytt til dataarkvisning, og du ser da resultater som ligner på disse:

Ansettelse Etternavn Fornavn
Leverandør Andersen Elizabeth A.
Internt Freehafer Nancy
Kunde Hasselberg Jonas
Internt Hellung Larsen Anne
Leverandør Hernandez-Echevarria Amaya
Kunde Mortensen Sven
Leverandør Sandberg Mikael
Leverandør Åmodt Tormod
Internt Thorpe Steven
Leverandør Weiler Cornelia
Internt Zare Robert

Blande datatyper

Hvis spørringene du slår sammen er veldig forskjellige, kan det oppstå en situasjon der et utdatafelt må kombinere data fra forskjellige datatyper. Hvis dette er tilfellet, returnerer unionsspørringen som oftest resultater som tekstdatatype fordi den datatypen kan inneholde både tekst og tall.

Hvis du vil forstå hvordan dette fungerer, bruker vi unionsspørringen Produkttransaksjoner i eksempeldatabasen for Northwind. Åpne eksempeldatabasen, og åpne deretter Produkttransaksjoner-spørringen i dataarkvisning. De siste ti postene skal ligne på disse utdataene:

Produkt-ID Ordredato Firmanavn Transaksjon Antall
77 22.01.2006 Leverandør B Kjøp 60
80 22.01.2006 Leverandør D Kjøp 75
81 22.01.2006 Leverandør A Kjøp 125
81 22.01.2006 Leverandør A Kjøp 200
7 20.01.2006 Firma D Salg 10
51 20.01.2006 Firma D Salg 10
80 20.01.2006 Firma D Salg 10
34 15.01.2006 Firma AA Salg 100
80 15.01.2006 Firma AA Salg 30

La oss anta at du vil dele Antall-feltet i to felt: Kjøp og Salg. La oss også anta at du ønsker en fast nullverdi for feltet uten verdi. Slik ser det ut for denne unionsspørringen 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;

Hvis du bytter til dataarkvisning, ser du de ti siste postene oppført som følger:

Produkt-ID Ordredato Firmanavn Transaksjon Kjøp Salg
74 22.01.2006 Leverandør B Kjøp 20 0
77 22.01.2006 Leverandør B Kjøp 60 0
80 22.01.2006 Leverandør D Kjøp 75 0
81 22.01.2006 Leverandør A Kjøp 125 0
81 22.01.2006 Leverandør A Kjøp 200 0
7 20.01.2006 Firma D Salg 0 10
51 20.01.2006 Firma D Salg 0 10
80 20.01.2006 Firma D Salg 0 10
34 15.01.2006 Firma AA Salg 0 100
80 15.01.2006 Firma AA Salg 0 30

Hvis vi fortsetter med dette eksemplet, hva om du ønsker at feltene med nullverdier skal være tomme? Du kan endre innstillingen SQL til å vise ingenting i stedet for null ved å legge til nøkkelordet Null , som vist her:

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;

Du har nå imidlertid et uventet resultat, som du kanskje la merke til da du byttet til dataarkvisning. I kolonnen Kjøp er innholdet i hvert felt fjernet:

Produkt-ID Ordredato Firmanavn Transaksjon Kjøp Salg
74 22.01.2006 Leverandør B Kjøp
77 22.01.2006 Leverandør B Kjøp
80 22.01.2006 Leverandør D Kjøp
81 22.01.2006 Leverandør A Kjøp
81 22.01.2006 Leverandør A Kjøp
7 20.01.2006 Firma D Salg 10
51 20.01.2006 Firma D Salg 10
80 20.01.2006 Firma D Salg 10
34 15.01.2006 Firma AA Salg 100
80 15.01.2006 Firma AA Salg 30

Årsaken til dette er at Access fastslår datatypene for feltene fra den første spørringen. I dette eksemplet er ikke Null et tall.

Hva skjer så hvis du prøver å sette inn en tom streng for den tomme verdien i feltene? For SQL dette forsøket kan se slik ut:

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;

Når du bytter til dataarkvisning, ser du at Access henter Kjøp-verdiene, men at verdiene ble konvertert til tekst. Du ser at dette er tekstverdier da de er venstrejustert i dataarkvisning. Den tomme strengen i den første spørringen er ikke et tall, og derfor ser du disse resultatene. Du legger også merke til at Salg-verdiene konverteres til tekst, fordi kjøpspostene inneholder en tom streng.

Produkt-ID Ordredato Firmanavn Transaksjon Kjøp Salg
74 22.01.2006 Leverandør B Kjøp 20
77 22.01.2006 Leverandør B Kjøp 60
80 22.01.2006 Leverandør D Kjøp 75
81 22.01.2006 Leverandør A Kjøp 125
81 22.01.2006 Leverandør A Kjøp 200
7 20.01.2006 Firma D Salg 10
51 20.01.2006 Firma D Salg 10
80 20.01.2006 Firma D Salg 10
34 15.01.2006 Firma AA Salg 100
80 15.01.2006 Firma AA Salg 30

Hva gjør du for å løse dette?

Én løsning kan være å tvinge spørringen til å forvente at feltverdien skal være et tall. Du kan gjøre dette med dette uttrykket:


IIf(False, 0, Null)

Betingelsen som skal kontrolleres, False, er aldri True, så uttrykket returnerer Nullalltid. Access evaluerer imidlertid fortsatt begge utdataalternativene og behandler utdataene som numeriske eller Null.

Slik kan vi bruke dette uttrykket i vårt fungerende eksempel:


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;

Du trenger ikke å endre den andre spørringen.

Hvis du bytter til dataarkvisning, ser du nå alternativet vi ønsker:

Produkt-ID Ordredato Firmanavn Transaksjon Kjøp Salg
74 22.01.2006 Leverandør B Kjøp 20
77 22.01.2006 Leverandør B Kjøp 60
80 22.01.2006 Leverandør D Kjøp 75
81 22.01.2006 Leverandør A Kjøp 125
81 22.01.2006 Leverandør A Kjøp 200
7 20.01.2006 Firma D Salg 10
51 20.01.2006 Firma D Salg 10
80 20.01.2006 Firma D Salg 10
34 15.01.2006 Firma AA Salg 100
80 15.01.2006 Firma AA Salg 30

En alternativ metode for å oppnå samme resultat er å starte spørringene i unionsspørringen med enda en spørring:

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 returnerer faste verdier for datatypen du definerer, for hvert felt. Du ønsker selvsagt ikke at utdataene i denne spørringen skal samhandle med resultatene, så du bør derfor inkludere en WHERE-setning og angi den til Usann.

WHERE False

Dette er et lite triks. Siden betingelsen alltid er usann, returnerer ikke spørringen noe. Du kombinerer denne setningen med den eksisterende SQL-setningen, og vi får en fullført setning som følger:

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;

Obs!

I dette eksemplet returnerer den kombinerte spørringen i Gastronor-databasen 100 poster, mens de to individuelle spørringene returnerer 58 og 43 poster, som blir totalt 101 poster. Denne forskjellen skjer fordi to poster ikke er unike. Se Arbeide med unike poster i unionsspørringer ved bruk av UNION ALL for å finne ut hvordan du løser dette scenarioet ved å bruke UNION ALL.

Legge til totalsummer i en unionsspørring

Et spesielt bruksområde for en unionsspørring er å kombinere et sett med poster som inneholder summen av ett eller flere felter.

Her ser du et annet eksempel som du kan opprette i eksempeldatabasen for Northwind, for å illustrere hvordan du inkluderer en totalsum i en unionsspørring.

  1. Opprett en ny enkel spørring for å vise kjøp av øl (Product ID=34 i Northwind-databasen) ved bruk av følgende SQL-syntaks:

    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. Bytt til dataarkvisning, og du skal da se fire kjøp:

    Dato mottatt Antall
    22.01.2006 100
    22.01.2006 60
    4.04.2006 50
    05.04.2006 300
  3. Hvis du ønsker en totalsum, oppretter du en enkel samlespørring ved bruk av følgende SQL-setning:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
  4. Bytt til dataarkvisning, og du skal da se bare én post:

    MaxOfDate Received SumOfQuantity
    05.04.2006 510
  5. Kombiner disse to postene i en unik unionsspørring for å legge til totalantallet i posten for kjøpspostene.

    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. Bytt til dataarkvisning, og du skal se de fire kjøpene med summen for hver, etterfulgt av en post som inneholder totalantallet.

    Dato mottatt Antall
    22.01.2006 60
    22.01.2006 100
    4.04.2006 50
    05.04.2006 300
    05.04.2006 510

Dette tok for seg det grunnleggende med å legge til summer i en unionsspørring. Du ønsker kanskje også å inkludere faste verdier i begge spørringene som «Detalj» og «totalsum» for å separere totalsum-posten fra de andre postene visuelt. Du kan lese om å bruke faste verdier i inndelingen Kombinere tre eller flere tabeller eller spørringer i en unionsspørring.

Arbeide med unike poster i unionsspørringer ved bruk av UNION ALL

Unionsspørringer i Access inneholder bare forskjellige poster som standard. Men hva om du ønsker å inkludere alle postene? Et annet eksempel kan være nyttig.

I den forrige inndelingen lærte du hvordan du opprettet en totalsum i en unionsspørring. Endre unionsspørringen SQL slik at den inkluderer Product ID = 48:


SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION

SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Purchase Order Details].[Date Received];

Bytt til dataarkvisning, og du ser da et litt villedende resultat:

Dato mottatt Antall
22.01.2006 100
22.01.2006 200

Én post returnerer selvsagt ikke to ganger det totale antallet.

Du ser dette resultatet fordi samme antall sjokolade ble solgt to ganger på samme dag, som du kan se i tabellen Innkjøpsordredetaljer. Her ser du et resultat for en enkel utvalgsspørring som viser begge postene i eksempeldatabasen til Northwind:

Innkjøpsordre-ID Produkt Quantity
100 Northwind Traders Chocolate 100
92 Northwind Traders Chocolate 100

I unionsspørringen som ble nevnt tidligere kan du se at feltet Innkjøpsordre-ID ikke er inkludert, og at de to feltene ikke utgjør to forskjellige poster.

Hvis du vil inkludere alle postene, bruker UNION ALL du i stedet for UNION i .SQL Dette kommer sannsynligvis til å påvirke sorteringen av resultatene, så du kan også inkludere en ORDER BY setning for å fastslå sorteringsrekkefølgen. Her er endringen SQL basert på det forrige eksemplet:


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

Bytt til dataarkvisning, og du skal se alle detaljene i tillegg til en totalsum som siste post.

Dato mottatt Totalsum Antall
22.01.2006 100
22.01.2006 100
22.01.2006 Totalsum 200

Bruke en unionsspørring for å filtrere poster i et skjema ved bruk av en kombinasjonsbokskontroll

Et vanlig brukstilfelle for en unionsspørring er å bruke den som en postkilde for en kombinasjonsbokskontroll i et skjema. Du kan bruke den kombinasjonsboksen til å velge en verdi for å filtrere postene i et skjema. Du kan for eksempel filtrere de ansatte etter bosted.

Hvis du vil se hvordan dette kan fungere, ser du her et annet eksempel som du kan opprette i eksempeldatabasen for Northwind, for å illustrere dette scenarioet.

  1. Opprette en enkel utvalgsspørring ved hjelp av denne SQL syntaksen:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
    
  2. Bytt til dataarkvisning, og du skal da se følgende resultater:

    Poststed Filter
    Seattle Seattle
    Bellevue Bellevue
    Redmond Redmond
    Kirkland Kirkland
    Seattle Seattle
    Redmond Redmond
    Seattle Seattle
    Redmond Redmond
    Seattle Seattle
  3. Det er ikke sikkert du får mye verdi fra disse resultatene. Utvid imidlertid spørringen, og gjør den om til en unik spørring ved hjelp av følgende SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
    
  4. Bytt til dataarkvisning, og du skal da se følgende resultater:

    Poststed Filter
    <Alle> *
    Bellevue Bellevue
    Kirkland Kirkland
    Redmond Redmond
    Seattle Seattle

    Access utfører en unionspørring av de ni postene, som ble vist tidligere, med faste feltverdier Alle <> og «*». Siden denne unionsetningen ikke inneholder UNION ALL, returnerer Access bare forskjellige poster. Det betyr at hvert poststed returneres bare én gang med faste identiske verdier.

  5. Nå som du har en fullført unionsspørring som viser hvert bynavn bare én gang, sammen med et alternativ som effektivt velger alle byer, kan du bruke denne spørringen som postkilde for en kombinasjonsboks i et skjema. Ved å bruke dette bestemte eksemplet som modell kan du opprette en kombinasjonsbokskontroll i et skjema, angi denne spørringen som postkilde, angi Kolonnebredde-egenskapen for Filter-kolonnen til 0 (null) for å skjule den visuelt, og deretter angi Bundet kolonne-egenskapen til 1 for å angi indeksen for den andre kolonnen. I egenskapen Filter for selve skjemaet kan du deretter legge til kode som følgende for å aktivere et skjemafilter ved hjelp av verdien som er valgt i kombinasjonsbokskontrollen:

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

    Brukeren av skjemaet kan deretter filtrere skjemapostene etter et spesifikt poststedsnavn, eller velge <Alle> for å vise alle postene for alle poststedene.

Til toppen av siden