Office
Logg på
Bruke en unionsspørring til å kombinere flere spørringer i ett resultat

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

Noen ganger vil du kanskje føre opp postene fra én tabell eller spørring med postene fra én eller flere andre tabeller for å lage ett sett med poster – en liste med alle postene fra to eller flere tabeller. Dette er hensikten med unionsspørring 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.

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

Utforske et eksempel på en fungerende unionsspørring

Hvis du noen gang har opprettet en unionsspørring tidligere, kan det hende du kan dra nytte av et fungerende eksempel i Northwind-malen i Access. Du kan søke etter Northwind-eksempelmalen på Kom i gang-siden i Access ved å klikke på Fil > Ny, eller du kan laste den ned direkte fra denne plasseringen: Northwind-eksempelmal.

Etter at Access åpner Northwind-databasen, avviser du bare påloggingsdialogboksen som vises først, og deretter utvider du navigasjonsruten. Klikk øverst i navigasjonsruten, og velg deretter Objekttype for å organisere alle databaseobjektene etter type. Deretter utvider du Spørringer-gruppen. Da ser du en spørring med navn 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. Dette betyr at den grafiske spørringsutformingen for Access ikke kan brukes for å bygge eller redigere unionsspørringer. Dette ser du hvis du åpner en unionsspørring fra navigasjonsruten: Access åpner den og viser resultatene i dataarkvisning. Du legger merke til at Design View ikke er tilgjengelig når du arbeider med unionsspørringer, under kommandoen VisningerHjem-fanen. Du kan veksle mellom Dataarkvisning og SQL-visning når du arbeider med unionsspørringer.

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

Nettleseren støtter ikke video. Installer Microsoft Silverlight, Adobe Flash Player eller Internet Explorer 9.

La oss se på SQL-syntaksen i 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 forteller Access at denne spørringen kombinerer to sett 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 sorterer Access alle postene 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 SQL-syntaksen direkte inn i SQL-visningen, 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 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. 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.

  5. Hvis du ønsker det, kan du legge til vilkår i feltene ved å skrive de aktuelle uttrykkene i Vilkår-raden i feltrutenettet.

  6. 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.

  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år du nå har opprettet utvalgsspørringene, kan du kombinere dem. 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 på Union i Spørring-gruppen på Utforming-fanen. Access skjuler spørringsutformingsvinduet og viser objektfanen SQL-visning. Nå er objektfanen SQL-visning tom.

  4. Klikk på fanen for den første utvalgsspørringen du vil kombinere i unionsspørringen.

  5. Klikk på Visning > SQL-visningHjem-fanen.

  6. Kopier SQL-setningen for utvalgsspørringen. Klikk på fanen for unionsspørringen som du begynte å 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 på ENTER for å bevege 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 på hvordan du bygger en unionsspørring

Her ser du 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.

Nettleseren støtter ikke video. Installer Microsoft Silverlight, Adobe Flash Player eller Internet Explorer 9.

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 UNION-nøkkelordet. Du kan deretter se resultatene i dataarkvisningen.

  4. Legg til en ordresetning i én av spørringene, og lim deretter inn ORDER BY-setningen i SQL-visningen til unionsspørringen. 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. Den siste SQL-setningen 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 bare skrive dine egne setninger for unionsspørringen direkte inn i SQL-visningen. 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.

I eksemplet fra den forrige inndelingen som brukte Northwind-databasen, ble bare data fra 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. Det er nok ikke nyttig i din situasjon. Hvis du ønsker at det feltet skal angi 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. SQL-setningen vil nå se slik 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

Spørringen ovenfor kan reduserer ytterligere da Access bare leser navnene på utdatafeltene fra den første spørringen i en unionsspørring. Her kan du se at vi har fjernet 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];

Bestilling er bare tillatt én gang, men hver spørring kan filtreres enkeltvis, i en unionsspørring i Access. Ved å fortsette på unionsspørringen fra forrige inndeling ser du her et eksempel hvor 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 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

Hvis unionspørringene er veldig forskjellige, kan det oppstå en situasjon hvor et utdatafelt må kombinere data fra forskjellige datatyper. Hvis dette er tilfellet, returnerer unionsspørringen som oftest resultater som tekstdata. Det er 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 ønsker Antall-feltet delt i to – Kjøp og Salg. La oss også anta at du ønsker å ha en fast nullverdi for feltet uten verdi. Slik vil SQL-setningen 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, 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 null skal være tomme? Du kan endre SQL-setningen slik at den bare viser null ved å legge til Null-nøkkelordet som følger:

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? SQL-setningen for dette forsøket kan se ut som følger:

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. Dette kan oppnås med uttrykket:

IIf(False, 0, Null)

Betingelsen som skal kontrolleres, Usann, blir aldri Sann, og derfor returnerer uttrykket alltid Null. Men Access evaluerer fremdeles begge utdataalternativene og fastslår om utdataene er numerisk 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;

Vær oppmerksom på at du ikke trenger å 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 denne verdien alltid er usann, og spørringen kommer ikke til å returnere 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!: Den kombinerte spørringen i dette eksemplet som bruker Northwind-databasen returnerer 100 poster, mens de to individuelle spørringene returnerer 58 og 43 poster, som blir totalt 101 poster. Årsaken til avviket er at to poster ikke er unike. Du kan se inndelingen Arbeide med unike poster i unionsspørringer ved bruk av UNION ALL for å finne ut hvordan du løser dette scenarioet ved bruk av UNION ALL.

Et spesialtilfelle for en unionsspørring er at du kan 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.

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 SQL-setningen for den unionsspørringen 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 selvfølgelig ikke to ganger antallet totalt.

Årsaken til at du ser dette resultatet er 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

Product

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 ønsker å inkludere alle postene, bruker du UNION ALL i stedet for UNION i SQL-setningen. Dette kommer sannsynlig bare til å få innvirkning på sorteringen av resultatene, så du kan også inkludere en ORDER BY-setning for å fastslå sorteringsrekkefølgen. Her ser du den endrede SQL-setningen som ble endret fra forrige eksempel:

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

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 bruk av SQL-syntaks:

    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 transformer den til en unik spørring ved bruk av følgende SQL-setning:

    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

    <All>

    *

    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 <All> 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år du nå har fullført en unionsspørring som viser hvert poststed bare én gang, sammen med et alternativ som kan velge alle poststedene, kan du bruke denne spørringen som postkilden for en kombinasjonsboks i et skjema. Hvis du bruker dette spesifikke eksemplet som en modell, kan du opprette en kombinasjonsbokskontroll i et skjema, angi denne spørringen som postkilde, angi egenskapen Kolonnebredde for Filter-kolonnen til 0 (null) for å skjule den visuelt, og deretter angi egenskapen Bundet kolonne til 1 for å angi indeksen til den andre kolonnen. Du kan deretter legge til kode i egenskapen Filter i skjemaet som følger. Dette aktiverer et skjemafilter ved bruk av verdien til det som ble utvalgt 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 <All> for å vise alle poster for alle poststedene.

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.

×