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 en 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 aldri har opprettet en unionsspørring før, kan det hjelpe å først studere et fungerende eksempel i Northwind Access-malen. Du kan søke etter eksempelmalen Gastronor på komme i gang-siden i Access ved å velge Ny fil>. Du kan også laste ned en kopi direkte fra eksempelmalen Northwind.

Når Access åpner Northwind-databasen, lukker du dialogboksen for pålogging som først vises, 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 ser 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 et unionsspørringsikon i Access. I motsetning til vanlige utvalgs- og redigeringsspørringer er ikke tabeller relatert i en unionsspørring. Det betyr at du ikke kan bruke spørringsutforming for Access-grafikk til å bygge eller redigere unionsspørringer. Hvis du åpner en unionsspørring fra navigasjonsruten, åpner Access den og viser resultatene 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 studiet av dette unionsspørringseksemplet, klikker duSQL-visningforhjemvisninger>> for å vise syntaksen SQL som definerer den. I denne illustrasjonen har vi lagt til litt ekstra avstand, SQL slik at du enkelt kan se de ulike delene som utgjør en unionsspørring.

La oss se på syntaksen SQL for denne unionsspørringen fra Northwind-databasen 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 UNION nøkkelordet, som ber Access kombinere disse to settene med poster.

Den siste delen av denne SQL setningen bestemmer rekkefølgen på de kombinerte postene ved hjelp av en ORDER BY setning. I dette eksemplet bestiller Access 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 være enklere å bygge den i deler med 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 tabellen som inneholder feltene du vil inkludere. 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, er det på tide å 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 . Nå 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 objektfanen SQL View i unionsspørringen.
  7. Slett semikolonet (;) på slutten av utvalgsspørringssetningen SQL .
  8. Trykk enter for å flytte markøren ned én linje, og skriv deretter inn UNION 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 SQL setningene for utvalgsspørringene i SQL View-vinduet i unionsspørringen. Ikke slett semikolonet, eller skriv inn noe etter SQL setningen for den siste utvalgsspø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 som du kan opprette på nytt i eksempeldatabasen Gastronor. 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. Pass på å fjerne det ekstra semikolonet og legge til nøkkelordet UNION . Du kan deretter se resultatene i dataarkvisningen.

  4. Legg til en ordresetning i én av spørringene, og lim ORDER BY deretter inn setningen 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. SQL Finalen som kombinerer og sorterer navnene for dette unionsspørringseksemplet, 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 er svært komfortabel med å skrive SQL syntaks, kan du skrive din egen SQL setning for unionsspørringen direkte i SQL View. 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 forrige del som bruker Northwind-databasen, kombineres data fra bare to tabeller. 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, vil alle ansatte bli oppført med eksempelet på firmanavn, noe som sannsynligvis ikke er veldig nyttig. Hvis du vil at feltet skal vise om en person er en internt ansatt, fra en leverandør eller fra en kunde, kan du inkludere en fast verdi i stedet for firmanavnet. Slik ser det SQL ut:


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 leser navnene på utdatafeltene bare fra den første spørringen i en unionsspørring. Her fjernes utdataene fra andre og tredje spørringsinndelinger:


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

Filtrering i unionsspørringer

I en unionsspørring i Access er sortering bare tillatt én gang, men du kan filtrere hver spørring enkeltvis. Her er 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 fagforeninger er svært forskjellige, kan det oppstå en situasjon der et utdatafelt må kombinere data fra forskjellige datatyper. I så fall vil unionsspørringen oftest returnere resultatene som en tekstdatatype, siden denne 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 vil ha en fast nullverdi for feltet uten verdi. Slik ser det SQL ut for denne unionsspørringen:

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 du fortsetter med dette eksemplet, hva om du vil at feltene med nullverdier skal være tomme? Du kan endre SQL til å vise ingenting i stedet for null ved å legge til Null nøkkelordet, 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.

Så hva skjer hvis du prøver å sette inn en tom streng for den tomme verdien i feltene? For SQL dette forsøket kan det 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 er å 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, Falseer aldri True, så uttrykket returnerer Nullalltid . Access evaluerer imidlertid fortsatt både utdataalternativer 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. Fordi 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 Northwind-databasen 100 poster, mens de to individuelle spørringene returnerer 58 og 43 poster for totalt 101 poster. Denne forskjellen skjer fordi to poster ikke er unike. Se Arbeide med distinkte poster i unionsspørringer ved hjelp av UNION ALL for å lære hvordan du løser dette scenarioet ved hjelp UNION ALLav .

Legge til totalsummer i en unionsspørring

En spesiell bruk for en unionsspørring er å kombinere et sett med poster med én post som inneholder summen av ett eller flere felt.

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 vil kanskje også inkludere faste verdier i begge spørringene, for eksempel «Detalj» og «Total» for å skille totalposten visuelt fra de andre postene. 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 slik at den SQL 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 det dobbelte av det totale antallet.

Du ser dette resultatet fordi den samme mengden sjokolade ble solgt to ganger på én dag, som registrert i tabellen Kjø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 er angitt tidligere, kan du se at feltet Kjøpsordre-ID ikke er inkludert, og at de to feltene ikke utgjør to distinkte poster.

Hvis du vil inkludere alle postene, bruker UNION ALL du i stedet UNION for i SQL. Dette vil mest sannsynlig påvirke sorteringen av resultatene, så du vil kanskje også inkludere en ORDER BY setning for å bestemme en sorteringsrekkefølge. Her er endret basert på det forrige eksemplet 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];

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. Opprett 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 spørringen, og gjør den om til en unionsspø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 sammensluting av de ni postene, som tidligere ble vist, med faste feltverdier for <Alle> og «*». Fordi denne unionssetningen ikke inneholder UNION ALL, returnerer Access bare distinkte poster. Det betyr at hver by 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. Hvis du bruker dette eksemplet som modell, kan du opprette en kombinasjonsbokskontroll i et skjema, angi denne spørringen som postkilde, angi kolonnebreddeegenskapen for filterkolonnen til 0 (null) for å skjule den visuelt, og deretter angi egenskapen Bundet kolonne til 1 for å angi indeksen for den andre kolonnen. Filter I egenskapen 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 til et bestemt bynavn eller velge <Alle> for å vise alle postene for alle byer.

Til toppen av siden