Bruke en unionsspørring til å kombinere flere søk i ett resultat

Bruke en unionsspørring til å kombinere flere søk i ett resultat

Obs!:  Vi ønsker å gi deg det nyeste hjelpeinnholdet så raskt som mulig, på ditt eget språk. Denne siden er oversatt gjennom automatisering og kan inneholde grammatiske feil eller unøyaktigheter. Formålet vårt er at innholdet skal være nyttig for deg. Kan du fortelle oss om informasjonen var nyttig for deg nederst på denne siden? Her er den engelske artikkelen for enkel referanse.

Noen ganger vil du kanskje listen poster fra én tabell eller spørring med de fra én eller flere tabeller slik at de danner ett sett med poster – en liste med alle postene fra to eller flere tabeller. Dette er formålet med en unionsspørring i Access.

For å effektivt forstå unionsspørringer, bør du først være kjent med å utforme grunnleggende utvalgsspørringer i Access. Hvis du vil lære mer om hvordan du utformer utvalgsspørringer, kan du se opprette en enkel utvalgsspørring.

Obs!: Innholdet i denne artikkelen er beregnet for bruk med Access-skrivebordsdatabaser. Du kan ikke opprette eller bruke en unionsspørring i Access-databaser eller Access-nettapper.

Studere et praktisk unionsspørring-eksempel

Hvis du aldri har opprettet en unionsspørring før, kan det være nyttig for første hos et praktisk eksempel i Northwind Access-malen. Du kan søke etter Northwind eksempelmalen på siden for få gang av Access ved å klikke fil > Ny, eller du kan direkte laste ned en kopi fra denne plasseringen: Northwind eksempelmalen.

Når Access åpner Gastronor-databasen, må du lukke dialogboksen påloggingsskjemaet som vises først og deretter utvider du navigasjonsruten. Klikk øverst i navigasjonsruten, og velg deretter Objekttype til å organisere alle databaseobjekter etter type. Utvid deretter spørringer-gruppen, og du ser en spørring kalt Produkt transaksjoner.

Unionsspørringer er enkelt å skille fra andre spørringen objekter fordi de har en spesiell ikon som ligner på to sammen sirkler som representerer et united sett fra to sett:

Skjermbilde av en unionsspørring i Access.

I motsetning til vanlig merking og redigeringsspørringer, er det ikke relatert tabeller i en unionsspørring, noe som betyr at Access grafikk Spørringsutforming ikke kan brukes til å opprette eller redigere unionsspørringer. Du kan oppleve dette hvis du åpner en unionsspørring fra navigasjonsruten. Access åpner den og vise resultatene i dataarkvisning. Under kommandoen visninger i kategorien Hjem ser du at Utformingsvisning ikke er tilgjengelig når du arbeider med unionsspørringer. Du kan bare bytte mellom Dataarkvisning og SQL-visning når du arbeider med unionsspørringer.

Hvis du vil fortsette din undersøkelse i dette eksemplet unionsspørring, klikker du Hjem > visninger > SQL-visning for å vise SQL-syntaksen som definerer det. Denne illustrasjonen viser vi har lagt til noen ekstra mellomrom i SQL slik at du enkelt kan se de ulike delene som utgjør en unionsspørring.

Visuelle simulert unionsspørringen i SQL-visning fra Northwind eksempel Access-malen.

La oss studere SQL-syntaks for denne unionsspørringen fra Gastronor-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;

Først og de tredje delene av denne SQL-setningen er i hovedsak to utvalgsspørringer. Disse spørringene hente to forskjellige sett av poster. én fra tabellen Vareordrer og én fra tabellen Produktkjøp .

Den andre delen av denne SQL-setningen er UNION -nøkkelordet som forteller Access at denne spørringen kombinerer disse to sett med poster.

Den siste delen av denne SQL-setningen bestemmer sortering av de kombinerte postene ved hjelp av en ORDER BY -setning. I dette eksemplet vil Access rekkefølgen på alle postene etter Ordredato-feltet i synkende rekkefølge.

Obs!: Unionsspørringer er alltid skrivebeskyttet i Access. Du kan ikke endre verdier i dataarkvisning.

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

Selv om du kan opprette en unionsspørring ved å skrive direkte SQL-syntaks i SQL-visning, kan det være enklere å bygge det inn deler med utvalgsspørringer. Du kan deretter kopiere og lime inn SQL-delene i en kombinert unionsspørring.

Hvis du vil hoppe over lesing trinnene og se et eksempel i stedet, kan du se neste del, se et eksempel for å bygge en unionsspørring.

  1. Klikk Spørringsutforming i Spørringer-gruppen i kategorien Opprett.

  2. Dobbeltklikk tabellen som inneholder feltene du vil ta med, i dialogboksen Vis tabell. Tabellen legges til i utformingsvisningen for spørringen.

  3. Lukk dialogboksen Vis tabell.

  4. Dobbeltklikk hvert felt du vil inkludere i spørringsutformingsvinduet. Når du velger felt, kontroller at du legger til samme antall felt, i samme rekkefølge, at du legger til andre utvalgsspørringene. Vær forsiktig oppmerksom datatypene for feltene, og pass på at de har kompatible datatyper med felt i den samme plasseringen i de andre spørringene du kombinerer. Hvis du for eksempel hvis den første utvalgsspørringen har fem felt, først dagen som inneholder dato/klokkeslett-data, kontroller at hver av de andre utvalgsspørringene du kombinerer også har fem feltene, først dagen som inneholder dato/klokkeslett-data, og så videre.

  5. Du kan også legge til vilkår i feltene ved å skrive inn de aktuelle uttrykkene i Vilkår-raden i feltrutenettet.

  6. Når du er ferdig med å legge til felt og feltvilkår, bør du kjøre utvalgsspørringen og se gjennom utdataene. Klikk Kjør i resultater-gruppen i kategorien Utforming.

  7. Bytt til utformingsvisning for spørringen.

  8. Lagre utvalgsspørringen, og la den stå åpen.

  9. Gjenta denne prosessen for hver av utvalgsspørringene du vil kombinere.

Nå som du opprettet utvalgsspørringene, er det på tide å slå dem sammen. I dette trinnet oppretter du unionsspørringen ved å kopiere og lime inn SQL-setninger.

  1. Klikk Spørringsutforming i Spørringer-gruppen i kategorien Opprett.

  2. Lukk dialogboksen Vis tabell.

  3. Klikk Union i spørring-gruppen i kategorien Utforming. Access skjuler spørringsutformingsvinduet, og viser objektkategorien SQL-visning. På dette tidspunktet er objektkategorien SQL-visning tom.

  4. Klikk kategorien for den første utvalgsspørringen du vil kombinere i unionsspørringen.

  5. Kategorien Hjem, klikk visning > SQL-visning.

  6. Kopier SQL-setningen for utvalgsspørringen. Klikk fanen for unionsspørringen som du har startet til å opprette tidligere.

  7. Lim SQL-setningen for utvalgsspørringen inn i objektkategorien SQL-visning i unionsspørringen.

  8. Slett semikolonet (;) på slutten av SQL-setningen for utvalgsspørringen.

  9. Trykk Enter for å flytte markøren ned én linje, og skriv deretter UNION på den nye linjen.

  10. Klikk kategorien for den neste utvalgsspørringen som du vil kombinere i unionsspørringen.

  11. Gjenta trinn 5 til 10 til du har kopiert og limt inn alle SQL-setningene for utvalgsspørringene i SQL-visningsvinduet i unionsspørringen. Ikke slett semikolonet eller skriv noe etter SQL-setningen i den siste spørringen.

  12. Klikk Kjør i Resultater-gruppen i kategorien Utforming.

Resultatene av unionsspørringen vises i dataarkvisning.

Se et eksempel for å bygge en unionsspørring

Her er et eksempel som du kan opprette i eksempeldatabasen. Denne unionsspørringen samler inn navnene på personer fra Kunder -tabellen, og kombinerer dem med navnene på personer fra tabellen Leverandører . Hvis du vil følge med, jobb deg gjennom disse trinnene i din kopi av eksempeldatabasen.

Visuelle eksempel for å bygge en unionsspørring i Northwind eksempel Access-malen.

Her er fremgangsmåten som er nødvendige for å bygge dette eksemplet:

  1. Opprette to utvalgsspørringer kalt spørring1 og spørring2 med tabellene Kunder og produkter henholdsvis som datakilder. Bruk fornavn og Etternavn felt som viser verdier.

  2. Opprette en ny spørring kalt Query3 med ingen datakilde først, og klikk deretter kommandoen Union i kategorien Utforming til å gjøre denne spørringen i en unionsspørring.

  3. Kopiere og lime inn SQL-setninger fra spørring1 og spørring2 i Query3. Pass på å fjerne ekstra semikolonet og legge til i UNION-nøkkelordet. Deretter kan du se resultatene i dataarkvisning.

  4. Legg til i en bestilling-setning til én av spørringene, og lim deretter inn ORDER BY-setningen i SQL-visning i unionsspørringen. Legg merke til at i Query3, i unionsspørringen når rekkefølgen som skal tilføyes, først semikolon fjernes, og deretter tabellnavn fra feltnavnene.

  5. Endelig SQL-koden som kombinerer og sorterer navnene i dette eksemplet 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 er fortrolig med svært skriving SQL-syntaks, kan du helt sikkert skrive din egen SQL-setningen for unionsspørringen direkte til SQL vise. Imidlertid kan det være nyttig å følge fremgangsmåten i kopiere og lime inn SQL fra andre objekter i spørringen. Hver spørring kan være mye mer komplisert en enkel utvalgsspørring eksemplene brukes her. Det kan være til din fordel til å opprette og teste hver spørring nøye før å kombinere dem i unionsspørringen. Hvis unionsspørringen ikke kjører, kan du justere hver spørring enkeltvis til den er opprettet, og deretter bygger du unionsspørringen med riktig syntaks.

Se gjennom de gjenværende delene i denne artikkelen for å lære mer tips og råd om hvordan du bruker unionsspørringer.

I eksemplet fra den forrige delen bruker Gastronor-databasen, kombineres bare data fra to tabeller. Du kan imidlertid kombinere tre eller flere tabeller svært enkelt i en unionsspørring. Hvis du for eksempel kanskje bygge i forrige eksempel, du vil også inneholde navnene på de ansatte i spørringsresultatet. Du kan utføre denne oppgaven ved å legge til en tredje spørring og å kombinere med forrige SQL-setningen med en ekstra UNION-nøkkelordet slik ut:

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, vises alle ansatte med eksempel firmanavn, som sannsynligvis ikke er svært nyttig. Hvis du vil at dette feltet til å angi om en person er et internt ansatt, fra en leverandør, eller fra en kunde, kan du ta med faste verdier i stedet for navnet på firmaet. Her får du vite hvordan SQL vil se 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];

Her er hvordan resultatet vises i dataarkvisning. Access viser disse fem eksempel poster:

Ansettelse

Etternavn

Fornavn

Huset

Freehafer

Nancy

Huset

Giussani

Laura

Leverandør

Glasson

Stuart

Kunde

Goldschmidt

Daniel

Kunde

Gratacos Solsona

Antonio

Spørringen ovenfor kan reduseres enda mer fordi Access leser bare navnene på Vis-felt fra den første spørringen i en unionsspørring. Her kan du se vi har fjernet utdataene fra andre og tredje spørringen inndelinger:

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

I en Access-spørring union, rekkefølge tillates bare én gang, men hver spørring kan filtreres enkeltvis. Bygger på den forrige delen unionsspørring, her er et eksempel der vi har filtrert 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 dataarket visning og du vil se resultatene omtrent slik ut:

Ansettelse

Etternavn

Fornavn

Leverandør

Andersen

Elizabeth A.

Huset

Freehafer

Nancy

Kunde

Hasselberg

Jonas

Huset

Hellung Larsen

Anne

Leverandør

Hernandez Echevarria

Amaya

Kunde

Mortensen

Sven

Leverandør

Sandberg

Mikael

Leverandør

Åmodt

Tormod

Huset

Thorpe

Steven

Leverandør

Weiler

Cornelia

Huset

Zare

Robert

Hvis spørringer til union er svært forskjellig, kan det oppstå en situasjon der et utdatafelt må kombinere data for forskjellige datatyper. Hvis dette er tilfelle, unionsspørringen oftest returnerer resultatene som datatypen tekst fordi den datatypen kan inneholde både tekst og tall.

For å forstå hvordan dette fungerer, bruker vi Produktet transaksjoner unionsspørringen i eksempeldatabasen. Åpne som eksempeldatabasen, og åpne deretter Product transaksjoner spørringen i dataarkvisning. De siste ti postene skal ligne Resultatdataene:

Produkt-ID

Ordredato

Firmanavn

Transaksjon

Antall

77

1/22/2006

Leverandør B

Kjøp

60

80

1/22/2006

Leverandør D

Kjøp

75

81

1/22/2006

Leverandør A

Kjøp

125

81

1/22/2006

Leverandør A

Kjøp

200

7

1/20/2006

Firma D

Salg

10

51

1/20/2006

Firma D

Salg

10

80

1/20/2006

Firma D

Salg

10

34

15/1/2006

Firma AA

Salg

100

80

15/1/2006

Firma AA

Salg

30

La oss anta at du vil dele vinduet antall-feltet i to - kjøp og salg. La oss også anta at du vil ha en fast null verdien i feltet uten verdi. Her får du vite hvordan SQL vil se 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, vil du se de siste ti postene vises nå slik ut:

Produkt-ID

Ordredato

Firmanavn

Transaksjon

Kjøp

Selger

74

1/22/2006

Leverandør B

Kjøp

20

0

77

1/22/2006

Leverandør B

Kjøp

60

0

80

1/22/2006

Leverandør D

Kjøp

75

0

81

1/22/2006

Leverandør A

Kjøp

125

0

81

1/22/2006

Leverandør A

Kjøp

200

0

7

1/20/2006

Firma D

Salg

0

10

51

1/20/2006

Firma D

Salg

0

10

80

1/20/2006

Firma D

Salg

0

10

34

15/1/2006

Firma AA

Salg

0

100

80

15/1/2006

Firma AA

Salg

0

30

Fortsetter i dette eksemplet, hvor du finner feltene med null skal være tomt? Du kan endre SQL-Setningen for å vise noe i stedet for null ved å legge til i Null-nøkkelordet som følgende:

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;

Imidlertid som du kanskje har observert bytte til dataarkvisning, har du nå et uventet resultat. I kolonnen kjøp fjernes alle felt:

Produkt-ID

Ordredato

Firmanavn

Transaksjon

Kjøp

Selger

74

1/22/2006

Leverandør B

Kjøp

77

1/22/2006

Leverandør B

Kjøp

80

1/22/2006

Leverandør D

Kjøp

81

1/22/2006

Leverandør A

Kjøp

81

1/22/2006

Leverandør A

Kjøp

7

1/20/2006

Firma D

Salg

10

51

1/20/2006

Firma D

Salg

10

80

1/20/2006

Firma D

Salg

10

34

15/1/2006

Firma AA

Salg

100

80

15/1/2006

Firma AA

Salg

30

Det er årsaken til at dette skjer fordi Access bestemmer datatypene for feltene fra den første spørringen. I dette eksemplet er ikke Null et tall.

Så hva skjer hvis du prøver og sette inn en tom streng for tom verdi av felt? SQL-Setningen for denne forsøk 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 verdiene kjøp, men verdiene konvertert til tekst. Du kan se dette er tekstverdier fordi de er venstrejustert i dataarkvisning. En tom streng i den første spørringen er ikke et tall som er årsaken til at du ser disse resultatene. Du ser også at selge verdiene også konverteres til tekst ettersom innkjøp postene inneholder en tom streng.

Produkt-ID

Ordredato

Firmanavn

Transaksjon

Kjøp

Selger

74

1/22/2006

Leverandør B

Kjøp

20

77

1/22/2006

Leverandør B

Kjøp

60

80

1/22/2006

Leverandør D

Kjøp

75

81

1/22/2006

Leverandør A

Kjøp

125

81

1/22/2006

Leverandør A

Kjøp

200

7

1/20/2006

Firma D

Salg

10

51

1/20/2006

Firma D

Salg

10

80

1/20/2006

Firma D

Salg

10

34

15/1/2006

Firma AA

Salg

100

80

15/1/2006

Firma AA

Salg

30

Så hvordan løser du dette puslespill?

En løsning er å tvinge spørringen du kan forvente feltverdien er et tall. Dette kan utføres med uttrykket:

IIf(False, 0, Null)

Betingelsen for å kontrollere, Usann, blir aldri Sann, dermed uttrykket vil alltid returnere Null, men Access fremdeles evaluerer begge Utdataalternativer og bestemmer resultatet skal være numerisk eller Null.

Her får du vite hvordan vi kan bruke dette uttrykket i eksemplet vårt arbeide:

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;

Legg merke til at det ikke er nødvendig å endre den andre spørringen.

Hvis du bytter til dataarkvisning, ser du nå et resultat som vi ønsker:

Produkt-ID

Ordredato

Firmanavn

Transaksjon

Kjøp

Selger

74

1/22/2006

Leverandør B

Kjøp

20

77

1/22/2006

Leverandør B

Kjøp

60

80

1/22/2006

Leverandør D

Kjøp

75

81

1/22/2006

Leverandør A

Kjøp

125

81

1/22/2006

Leverandør A

Kjøp

200

7

1/20/2006

Firma D

Salg

10

51

1/20/2006

Firma D

Salg

10

80

1/20/2006

Firma D

Salg

10

34

15/1/2006

Firma AA

Salg

100

80

15/1/2006

Firma AA

Salg

30

En annen metode å oppnå det samme resultatet er å prepend spørringene i unionsspørringen med en annen 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

For hvert felt returnerer Access faste verdier av datatypen du definerer. Selvfølgelig du ikke vil at resultatet av denne spørringen forstyrre resultatene så hemmeligheten unngås som er å inkludere en WHERE-setningsdel USANN:

WHERE False

Dette er et lite stikk fordi dette er USANN, og deretter spørringen returnerer ikke noe. Kombinere denne setningen med eksisterende SQL, og vi kommer til en fullført oppgave på følgende måte:

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!: Kombinerte spørringen her returnerer i dette eksemplet bruker Gastronor-databasen 100 postene, selv om de to individuelle spørringene returnerer 58 og 43 poster totalt 101 poster. Årsaken til denne uoverensstemmelsen er fordi to poster ikke er unike. Se delen, arbeide med forskjellige poster i unionsspørringer ved hjelp av UNION ALL, for å lære hvordan du kan løse dette scenariet ved hjelp av UNION ALL.

Det er et spesielt tilfelle for en unionsspørring til å kombinere et sett med poster med én post som inneholder summen av ett eller flere felt.

Her er et annet uttrykk som du kan opprette i eksempeldatabasen til illustrerer hvordan du kan få en totalsum i en unionsspørring.

  1. Opprette en ny enkel spørring for å vise kjøp av øl (vare-ID = 34 i Gastronor-databasen) med 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 dataarket skal visning, og se fire kjøp:

    Datoen mottatt

    Antall

    1/22/2006

    100

    1/22/2006

    60

    4/4/2006

    50

    4/5/2006

    300

  3. Hvis du vil ha summen, oppretter du en enkel samle spørring ved hjelp av følgende SQL:

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

    MaxOfDate mottatt

    SamletAntall

    4/5/2006

    510

  5. Kombinere disse to spørringer i en unionsspørring slik tilføyer posten med det totale antallet til Kjøp poster:

    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 dataarket skal visning, og se fire kjøp med summen av alle etterfulgt av en oppføring som summerer antallet:

    Datoen mottatt

    Antall

    1/22/2006

    60

    1/22/2006

    100

    4/4/2006

    50

    4/5/2006

    300

    4/5/2006

    510

Som dekker grunnleggende for å legge til totalsummer i en unionsspørring. Du kan også hende du vil inkludere faste verdier i begge spørringer, for eksempel "Detaljskjema" og "Totalt" vil skille posten total fra de andre postene. Du kan se gjennom bruk av faste verdier under kombinere tre eller flere tabeller eller spørringer i en unionsspørring.

Unionsspørringer i Access som standard bare å omfatte forskjellige poster. Men hva om du vil ta med alle postene? Et annet eksempel kan være nyttig her.

I den forrige delen viste vi deg hvordan du oppretter en totalsum i en unionsspørring. Endre denne unionsspørringen SQL å inkludere vare-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 dataarket skal visning, og se litt villedende resultatet:

Datoen mottatt

Antall

1/22/2006

100

1/22/2006

200

Én post selvfølgelig ikke gå tilbake to ganger antall i alt.

Årsaken til du ser dette resultatet er fordi på én dag samme antall sjokolader ble solgt to ganger – som er registrert i tabellen Ordredetaljer for kjøp. Her er en enkel utvalgsspørring resultat som viser begge oppføringene i eksempeldatabasen:

ID for innkjøpsordre

Product

Quantity

100

Northwind Traders sjokolade

100

92

Northwind Traders sjokolade

100

I unionsspørringen tidligere nevnt, kan du se kjøp ordre-ID-feltet ikke er inkludert, og at de to feltene ikke tar opp to forskjellige poster.

Hvis du vil ta med alle postene, bruker du UNION ALL i stedet for SAMMENSLÅING i SQL. Dette vil mest sannsynlig har innvirkning på sorteringen av resultatene, slik at du bør også inneholde en ORDER BY-setningsdel for å finne en sorteringsrekkefølge. Her er endret SQL building av 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 dataarket visning, og du bør se alle detaljene i tillegg til helheten som den siste posten:

Datoen mottatt

Totalt

Antall

1/22/2006

100

1/22/2006

100

1/22/2006

Total

200

En vanlig bruk for unionsspørringer er skal fungere som postkilden for en kombinasjonsboks i et skjema. Du kan bruke denne kombinasjonsboks for å velge en verdi til å filtrere postene i skjemaet. Hvis du for eksempel filtrering ansattpostene etter deres by.

Hvis du vil se hvordan dette fungerer, er her et annet eksempel at du kan opprette i eksempeldatabasen å illustrere dette scenariet.

  1. Opprette en enkel utvalgsspørring som bruker denne SQL-syntaks:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Bytt til dataarket skal visning, og du ser følgende resultater:

    By

    Filtrer

    Seattle

    Seattle

    Bellevue

    Bellevue

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Se på disse resultatene du kan ikke se mye verdien. Utvid spørringen gjennom og transformere dem i 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 dataarket skal visning, og du ser følgende resultater:

    By

    Filtrer

    < alle >

    *

    Bellevue

    Bellevue

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access utfører en union ni postene, tidligere vist med fast feltverdier i < alle > og "*".

    Siden denne union setningsdelen ikke inneholder UNION ALL, returneres bare forskjellige poster som betyr at hver by, returneres bare én gang med fast identiske verdier.

  5. Nå som du har fullført unionsspørringer viser hver bynavnet bare én gang, sammen med et alternativ som effektivt merker alle byer, kan du bruke denne spørringen som postkilde for en kombinasjonsboks i et skjema. Hvis du bruker denne bestemte eksempel som en modell, kan du opprette en kombinasjonsboks i et skjema, angi denne spørringen som postkilde, setter du egenskapen kolonnebredden for kolonnen filteret til 0 (null) for å skjule det visuelt og setter deretter egenskapen bundet kolonne 1 for å angi indeksen i den andre kolonnen. I Filter-egenskapen på selve skjemaet, kan du deretter legge til i koden for eksempel følgende for å aktivere en skjemafilter ved hjelp av verdien til det ble valgt i kombinasjonsbokskontrollen:

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

    Brukeren av skjemaet kan deretter filtrere oppføringer for skjema til et bestemt bynavn eller velg < alle > til å vise alle postene for alle byer.

Til toppen av siden

Bli bedre på Office
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Office Insiders

Var denne informasjonen nyttig?

Takk for tilbakemeldingen!

Takk for tilbakemeldingen! Det høres ut som det kan være lurt å sette deg i kontakt med én av våre Office-kundestøtteagenter.

×