Office
Log på
Brug en foreningsforespørgsel til at samle flere forespørgsler i ét resultat

Brug en foreningsforespørgsel til at samle flere forespørgsler i ét resultat

Sommetider kan du få brug for at oprette en liste med poster fra en tabel eller forespørgsel med poster fra en eller flere andre tabeller for at oprette ét sæt poster – dvs. en liste med alle posterne fra to eller flere tabeller. Du kan bruge foreningsforespørgsler til at opfylde dette behov.

For effektivt at forstå foreningsforespørgsler skal du først være fortrolig med at designe grundlæggende udvælgelsesforespørgsler i Access. Du kan få mere at vide om, hvordan du designer udvælgelsesforespørgsler under Opret en simpel udvælgelsesforespørgsel.

Bemærk!: Indholdet i denne artikel henvender sig til dem, der bruger Access-skrivebordsdatabaser. Du kan ikke oprette eller bruge en foreningsforespørgsel i Access-webdatabaser eller Access-webapps.

Gransk et eksempel på en fungerende foreningsforespørgsel

Hvis du aldrig har oprettet en foreningsforespørgsel før, kan det være nyttigt først at granske et fungerende eksempel i Northwind-skabelonen i Access. Du kan søge efter Northwind-eksempelskabelonen på introduktionssiden til Access ved at klikke på Filer > Ny, eller du kan downloade en kopi direkte fra denne placering: Northwind-eksempelskabelon.

Når Access åbner Northwind-databasen, skal du lukke dialogboksen med logonformularen, der vises indledningsvist, og derefter udvide navigationsruden. Klik øverst i navigationsruden, og vælg derefter Objekttype for at organisere alle databaseobjekter efter type. Udvid derefter gruppen Forespørgsler for at få vist en forespørgsel kaldet Produkttransaktioner.

Foreningsforespørgsler er lette at skelne fra andre forespørgselsobjekter, fordi de har et specielt ikon, der ligner to sammesnoede cirkler, som står for ét samlet sæt af to forskellige sæt:

Skærmbillede af et foreningsforespørgselsikon i Access.

Til forskel fra normale udvælgelsesforespørgsler og handlingsforespørgsler er tabeller ikke relaterede i en foreningsforespørgsel, hvilket betyder, at den grafiske forespørgselsdesigner i Access ikke kan bruges til at bygge eller redigere foreningsforespørgsler. Du oplever dette, hvis du åbner en foreningsforespørgsel fra navigationsruden. Access åbner den og viser resultaterne i dataarkvisning. Under kommandoen Visninger på fanen Hjem vil du bemærke, at Designvisning ikke er tilgængelig, når du arbejder med foreningsforespørgsler. Du kan kun skifte mellem Dataarkvisning og SQL-visning, når du arbejder med foreningsforespørgsler.

Du fortsætter granskningen af dette eksempel på en foreningsforespørgsel ved at klikke på Hjem > Visninger > SQL-visning for at få vist den SQL-syntaks, der definerer den. Vi har i denne illustration tilføjet noget ekstra afstand i SQL'en, så du nemt kan se de forskellige dele, som udgør en foreningsforespørgsel.

Din browser understøtter ikke video. Installér Microsoft Silverlight, Adobe Flash Player eller Internet Explorer 9.

Lad os se nærmere på denne foreningsforespørgsels SQL-syntaks fra Northwind-databasen:

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 del i denne SQL-sætning er i bund og grund to udvælgelsesforespørgsler. Disse forespørgsler henter to forskellige sæt poster: én fra tabellen Produktordrer og én fra tabellen Produktkøb.

Den anden del af denne SQL-sætning er nøgleordet UNION, der fortæller Access, at denne forespørgsel kombinerer disse to sæt af poster.

Den sidste del af denne SQL-sætning bestemmer rækkefølgen af de kombinerede poster ved hjælp af en ORDER BY-sætning. I dette eksempel sætter Access alle posterne i rækkefølge efter feltet Ordredato i faldende rækkefølge.

Bemærk!: Foreningsforespørgsler er altid skrivebeskyttede i Access. Du kan ikke ændre nogen af værdierne i dataarkvisning.

Opret en foreningsforespørgsel ved at oprette og kombinere udvælgelsesforespørgsler

Selvom du kan oprette en foreningsforespørgsel ved at skrive SQL-syntaksen direkte i SQL-visningen, så kan det være lettere at opbygge den i bidder med udvælgelsesforespørgsler. Du kan derefter kopiere og indsætte SQL-delene i en kombineret foreningsforespørgsel.

Hvis du hellere vil springe læsningen af trinnene over og i stedet se et eksempel, skal du se det næste afsnit Se et eksempel på opbygningen af en foreningsforespørgsel.

  1. Klik på Forespørgselsdesign i gruppen Forespørgsler under fanen Opret.

  2. Dobbeltklik på den tabel, der indeholder de felter, du vil medtage, i dialogboksen Vis tabel.

  3. Luk dialogboksen Vis tabel.

  4. Dobbeltklik på de enkelte felter, du vil medtage, i forespørgslens designvindue. Når du vælger felter, skal du sikre dig, at du tilføjer det samme antal felter i samme rækkefølge, som du føjer til de andre udvælgelsesforespørgsler. Vær især opmærksom på datatyperne i felterne, og kontrollér, at datatyperne er kompatible med felter på samme placering i de andre forespørgsler, du samler. Hvis den første udvælgelsesforespørgsel f.eks. indeholder fem felter, og det første felt indeholder data af typen dato og klokkeslæt, skal du sikre dig, at hver af de andre udvælgelsesforespørgsler, du samler, også indeholder fem felter, hvor det første felt indeholder data af typen dato og klokkeslæt osv.

  5. Føj evt. kriterier til felterne ved at skrive de rette udtryk i rækken Kriterier i feltgitteret.

  6. Når du er færdig med at tilføje felter og feltkriterier, skal du køre udvælgelsesforespørgslen og gennemse outputtet. Klik på Kør i gruppen Resultater under fanen Design.

  7. Skift til forespørgslens designvisning.

  8. Gem udvælgelsesforespørgslen, og lad den være åben.

  9. Gentag denne fremgangsmåde for hver af de udvælgelsesforespørgsler, du vil samle.

Nu, hvor du har oprettet dine udvælgelsesforespørgsler, er det tid til at kombinere dem. I dette trin skal du oprette foreningsforespørgslen ved at kopiere og indsætte SQL-sætningerne.

  1. Klik på Forespørgselsdesign i gruppen Forespørgsler under fanen Opret.

  2. Luk dialogboksen Vis tabel.

  3. Klik på Forening i gruppen Forespørgsel under fanen Design. Access skjuler forespørgselsdesignvinduet og viser fanen til visning af SQL-objektet. På dette tidspunkt er fanen til visning af SQL-objektet tom.

  4. Klik på fanen for den første udvælgelsesforespørgsel, du vil samle i foreningsforespørgslen.

  5. På fanen Hjem skal du klikke på Vis > SQL-visning.

  6. Kopiér SQL-sætningen for udvælgelsesforespørgslen. Klik på fanen for den foreningsforespørgsel, du startede med at oprette tidligere.

  7. Indsæt SQL-sætningen for udvælgelsesforespørgslen under fanen SQL-visning for objektet for foreningsforespørgslen.

  8. Slet semikolonet(;) i slutningen af SQL-sætningen i udvælgelsesforespørgslen.

  9. Tryk på Enter for at flytte markøren en linje ned, og skriv derefter UNION på den nye linje.

  10. Klik på fanen for den næste udvælgelsesforespørgsel, du vil samle i foreningsforespørgslen.

  11. Gentag trin 5-10, indtil du har kopieret og indsat alle SQL-sætningerne for udvælgelsesforespørgslerne i foreningsforespørgslens SQL-visningsvindue. Undlad at slette semikolonet eller skrive noget efter SQL-sætningen for den sidste udvælgelsesforespørgsel.

  12. Klik på Kør i gruppen Resultater under fanen Design.

Resultaterne af foreningsforespørgslen vises i Dataarkvisning.

Se et eksempel på, hvordan du opretter en foreningsforespørgsel

Her er et eksempel, som du kan genskabe i Northwind-eksempeldatabasen. Denne foreningsforespørgsel indsamler navnene på personer fra tabellen Kunder og kombinerer dem med navnene på personer fra tabellen Leverandører. Du kan følge med ved at udføre disse trin i din kopi af Northwind-eksempeldatabasen.

Din browser understøtter ikke video. Installér Microsoft Silverlight, Adobe Flash Player eller Internet Explorer 9.

Du skal udføre følgende trin for at oprette dette eksempel:

  1. Opret to udvælgelsesforespørgsler kaldet Forespørgsel1 og Forespørgsel2 med tabellerne Kunder og Leverandører som datakilder. Brug felterne Fornavn og Efternavn som visningsværdier.

  2. Opret en ny forespørgsel kaldet Forespørgsel3 indledningsvist uden værdi, og klik derefter på kommandoen Forening på fanen Design for at gøre denne forespørgsel til en foreningsforespørgsel.

  3. Kopiér og indsæt SQL-sætningerne fra Forespørgsel1 og Forespørgsel2 i Forespørgsel3. Sørg for at fjerne det ekstra semikolon og indsætte nøgleordet UNION. Du kan derefter se resultaterne i dataarkvisning.

  4. Indsæt en sorteringsdelsætning i en af forespørgslerne, og indsæt derefter sætningen ORDER BY i foreningsforespørgslens SQL-visning. Bemærk, at i Forespørgsel3 (foreningsforespørgslen), mens tilføjelsen af rækkefølgen er ved at blive udført, fjernes semikolonerne først, og fjernes derefter tabelnavnene fra feltnavnene.

  5. Den endelige SQL, der kombinerer og sorterer navnene i dette eksempel på en foreningsforespørgsel, er vist herunder:

    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 meget fortrolig med at skrive SQL-syntaks, kan du sagtens skrive din egen SQL-sætning til foreningsforespørgslen direkte i SQL-visningen. Men det kan være nyttigt at følge fremgangsmåden med at kopiere og indsætte SQL fra andre forespørgselsobjekter. Hver forespørgsel kan være meget mere kompliceret, end de simple eksempler på udvælgelsesforespørgsler der er brugt her. Du kan drage fordel af nøje at oprette og teste hver forespørgsel, før de kombineres i foreningsforespørgslen. Hvis kørslen af foreningsforespørgslen mislykkes, kan du justere hver forespørgsel enkeltvist, indtil det lykkes, og derefter genopbygge din foreningsforespørgsel med den rettede syntaks.

Gennemse de øvrige afsnit i denne artikel for at få flere tips og tricks til brugen af foreningsforespørgsler.

I eksemplet fra det forrige afsnit, der bruger Northwind-databasen, kombineres der kun data fra to tabeller. Du kan dog meget let kombinere tre eller flere tabeller i en foreningsforespørgsel. Hvis vi f.eks. bygger videre på det foregående eksempel, så kan du også vælge at indsætte navnene på medarbejdere i forespørgselsresultatet. Du kan gøre dette gældende ved at tilføje en tredje forespørgsel og kombinere med den forrige SQL-sætning med et yderligere UNION-nøgleord på denne måde:

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 får vist resultatet i dataarkvisning, vises alle medarbejdere på en liste med eksempelfirmaets navn, hvilket nok ikke er til stor gavn. Hvis du vil have, at feltet skal angive, om en person er ansat internt, kan du fra en leverandør eller fra en kunde inkludere en fast værdi i stedet for firmanavnet. Her kan du se, hvordan SQL'en ser ud:

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

Sådan ser resultatet ud i dataarkvisningen. Access viser disse fem eksempelposter:

Ansættelse

Efternavn

Fornavn

Intern

Freehafer

Nancy

Intern

Giussani

Laura

Leverandør

Glasson

Stuart

Kunde

Goldschmidt

Daniel

Kunde

Gratacos Solsona

Antonio

Forespørgslen ovenfor kan reduceres yderligere, da Access kun læser navnene på outputfelterne fra den første forespørgsel i en foreningsforespørgsel. Her kan du se, at vi har fjernet outputtet fra den anden og tredje forespørgselssektion:

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

Det er kun tilladt at sortere én gang i en Access-foreningsforespørgsel, men hver forespørgsel kan filtreres enkeltvist. Vi bygger videre på den forrige sektions foreningsforespørgsel og viser her et eksempel, hvor vi har filtreret hver forespørgsel ved at tilføje en WHERE-delsætning.

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

Skift til dataarkvisning for at få vist resultater, der ser ud som herunder:

Ansættelse

Efternavn

Fornavn

Leverandør

Andersen

Elizabeth A.

Intern

Freehafer

Nancy

Kunde

Hasselberg

Jonas

Intern

Hellung-Larsen

Anne

Leverandør

Hernandez-Echevarria

Amaya

Kunde

Mortensen

Sven

Leverandør

Sandberg

Mikael

Leverandør

Sousa

Luis

Intern

Thorpe

Steven

Leverandør

Weiler

Cornelia

Intern

Zare

Robert

Hvis forespørgslerne, der skal forenes, er meget forskellige, kan der opstå en situation, hvor et outputfelt skal kombinere data fra forskellige datatyper. Hvis dette er tilfældet, så vil foreningsforespørgslen som oftest returnere resultaterne som en tekstdatatype, idet denne datatype kan indeholde både tekst og tal.

For at forstå, hvordan dette fungerer, så bruger vi foreningsforespørgslen Produkttransaktioner i Northwind-eksempeldatabasen. Åbn eksempeldatabasen, og åbn derefter forespørgslen Produkttransaktioner i dataarkvisning. De seneste ti poster bør svare til dette output:

Produkt-id

Ordredato

Firmanavn

Transaktion

Antal

77

22-01-2006

Leverandør B

Køb

60

80

22-01-2006

Leverandør D

Køb

75

81

22-01-2006

Leverandør A

Køb

125

81

22-01-2006

Leverandør A

Køb

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

Lad os antage, at du vil opdele feltet Antal i to – Køb og Salg. Lad os også antage, at du vil have en fast nulværdi for feltet uden værdi. Her kan du se, hvordan SQL'en ser ud for denne foreningsforespørgsel:

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 skifter til dataarkvisning, får du vist de sidste ti poster nu, som vist herunder:

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælg

74

22-01-2006

Leverandør B

Køb

20

0

77

22-01-2006

Leverandør B

Køb

60

0

80

22-01-2006

Leverandør D

Køb

75

0

81

22-01-2006

Leverandør A

Køb

125

0

81

22-01-2006

Leverandør A

Køb

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

I forlængelse af dette eksempel – hvad hvis felterne med nul skal være tomme? Du kan ændre SQL'en, så den viser ingenting i stedet for nul ved at tilføje nøgleordet Null, således:

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;

Men, som du måske har oplevet ved at skifte til dataarkvisning, så får du nu et uventet resultat. I kolonnen Køb er alle felter blevet ryddet:

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælg

74

22-01-2006

Leverandør B

Køb

 

 

77

22-01-2006

Leverandør B

Køb

 

 

80

22-01-2006

Leverandør D

Køb

 

 

81

22-01-2006

Leverandør A

Køb

 

 

81

22-01-2006

Leverandør A

Køb

 

 

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

Dette skyldes, at Access fastlægger datatyperne for felterne fra den første forespørgsel. I dette eksempel er Null ikke et tal.

Så hvad sker der, hvis du forsøger at indsætte en tom streng for den tomme feltværdi? SQL'en for dette forsøg kan f.eks. se således ud:

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 skifter til dataarkvisning, kan du se, at Access henter værdierne for Køb, men har konverteret værdierne til tekst. Du kan se, at det er tekstværdier, fordi de er venstrejusteret i dataarkvisningen. En tom streng i den første forespørgsel er ikke et tal, hvilket er grunden til, at du kan se de pågældende resultater. Du vil også bemærke, at Sælg-værdierne er konverteret til tekst, fordi posterne for køb indeholder en tom streng.

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælg

74

22-01-2006

Leverandør B

Køb

20

 

77

22-01-2006

Leverandør B

Køb

60

 

80

22-01-2006

Leverandør D

Køb

75

 

81

22-01-2006

Leverandør A

Køb

125

 

81

22-01-2006

Leverandør A

Køb

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

Hvordan kan du løse dette problem?

En løsning er at tvinge forespørgslen til at forvente, at feltværdien er et tal. Det kan gøres med følgende udtryk:

IIf(False, 0, Null)

Kontrollér betingelsen: Falsk kan aldrig være Sand, derfor vil udtrykket altid returnere Null, men Access evaluerer stadig begge outputindstillinger og beslutter, om outputtet er numerisk eller Null.

Vi kan bruge dette udtryk på følgende måde i vores 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;

Bemærk, at det ikke er nødvendigt at ændre den anden forespørgsel.

Hvis du skifter til dataarkvisning, får du nu vist et korrekt resultat:

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælg

74

22-01-2006

Leverandør B

Køb

20

 

77

22-01-2006

Leverandør B

Køb

60

 

80

22-01-2006

Leverandør D

Køb

75

 

81

22-01-2006

Leverandør A

Køb

125

 

81

22-01-2006

Leverandør A

Køb

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

Du kan også opnå det samme resultat ved at benytte en metode, hvor du foranstiller forespørgslerne i foreningsforespørgslen med endnu en forespørgsel:

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 værdier af datatypen, du definerer. Du vil selvfølgelig ikke have, at outputtet fra denne forespørgsel indvirker på resultaterne, så derfor skal du føje en WHERE-delsætning til Falsk:

WHERE False

Dette er et lille trick, da det altid er falsk, og derefter returnerer forespørgslen ikke noget. Når denne sætning kombineres med den eksisterende SQL, så ender vi med den følgende fuldførte sætning:

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;

Bemærk!: Den kombinerede forespørgsel i dette eksempel med brug af Northwind-databasen returnerer 100 poster, mens de to individuelle forespørgsler returnerer 58 og 43 poster med et samlet antal på 101 poster. Årsagen til denne forskel er, at to poster ikke er entydige. Se afsnittet Arbejd med særskilte poster i foreningsforespørgsler ved hjælp af UNION ALL for at få mere at vide om, hvordan du løser dette problem ved at bruge UNION ALL.

Der gælder det særlige forhold ved en foreningsforespørgsel, at et sæt poster kan kombineres med én post, der indeholder summen af ét eller flere felter.

Her er et andet eksempel, som du kan oprette i Northwind-eksempeldatabasen til illustration af, hvordan du får en totalværdi i en foreningsforespørgsel.

  1. Opret en ny simpel forespørgsel for at få vist indkøb af øl (Produkt-id=34 i Northwind-databasen) ved hjælp af 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. Når du skifter til dataarkvisning, bør du se fire køb:

    Modtaget d.

    Antal

    22-01-2006

    100

    22-01-2006

    60

    04-04-2006

    50

    05-04-2006

    300

  3. For at få totalen skal du oprette en simpel aggregeringsforespørgsel ved at bruge den følgende SQL:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Når du skifter til dataarkvisning, bør du kun se én post:

    MaxOfDate modtaget

    SumOfQuantity

    05-04-2006

    510

  5. Kombiner disse to forespørgsler i en foreningsforespørgsel for at føje posten med den totale mængde til posterne for køb:

    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. Hvis du skifter til dataarkvisning, bør du se de fire køb med summen for hver efterfulgt af en post, der lægger den samlede mængde sammen:

    Modtaget d.

    Antal

    22-01-2006

    60

    22-01-2006

    100

    04-04-2006

    50

    05-04-2006

    300

    05-04-2006

    510

Det var alt det grundlæggende om at sammenlægge totaler i en foreningsforespørgsel. Du kan også inkludere faste værdier i begge forespørgsler som f.eks. "Detalje" og "Total" for visuelt at adskille total-posten fra de andre poster. Du kan gennemse ved at bruge faste værdier i afsnittet Kombiner tre eller flere tabeller eller forespørgsler i en foreningsforespørgsel.

Foreningsforespørgsler i Access inkluderer som standard kun særskilte poster. Men hvad nu, hvis du vil inkludere alle poster? Et andet eksempel kan være nyttigt her.

I det forrige afsnit viste vi, hvordan du opretter en total i en foreningsforespørgsel. Tilpas den pågældende foreningsforespørgsels SQL, så den omfatter Produkt-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];

Når du skifter til dataarkvisning, bør du se et noget misvisende resultat:

Modtaget d.

Antal

22-01-2006

100

22-01-2006

200

Selvfølgelig returnerer en post ikke to gange den totale mængde.

Du ser dette resultat, fordi den samme mængde chokolade blev solgt to gange på den samme dag – som registreret i tabellen med Indkøbsordredetaljer. Her er en simpel udvælgelsesforespørgsel, der viser begge poster i Northwind-eksempeldatabasen:

Indkøbsordre-id

Produkt

Antal

100

Northwind Traders Chocolate

100

92

Northwind Traders Chocolate

100

I foreningsforespørgslen tidligere kan du se, at feltet Købsordre-id for købet ikke er inkluderet, og at de to felter ikke udgør to særskilte poster.

Hvis du vil inkludere alle poster, skal du bruge UNION ALL i stedet for UNION i SQL'en. Det vil højst sandsynligt få indflydelse på sorteringen af resultaterne, så du kan med fordel indsætte en ORDER BY-delsætning for at definere en sorteringsrækkefølge. Her ses den ændrede SQL opbygget ud fra det 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];

Når du skifter til dataarkvisning, bør du se alle oplysningerne ud over en total som den sidste post:

Modtaget d.

Total

Antal

22-01-2006

 

100

22-01-2006

 

100

22-01-2006

Total

200

En foreningsforespørgsel bruges almindeligvis som postkilden i et kombinationsfeltelement i en formular. Du kan bruge dette kombinationsfelt til at vælge en værdi beregnet til at filtrere formularens poster. Eksempelvis for at filtrere medarbejderposterne efter deres by.

Du kan se, hvordan dette kan fungere med endnu et eksempel, som du kan oprette i Northwind-eksempeldatabasen for at illustrere dette scenarie.

  1. Opret en simpel forespørgsel ved hjælp af denne SQL-syntaks:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Skift til dataarkvisning, og så bør du kunne se de følgende resultater:

    By

    Filter

    Seattle

    Seattle

    Bellevue

    Bellevue

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Resultaterne viser nok ikke meget af værdi. Men prøv at udvide forespørgslen og ændre den til en foreningsforespørgsel ved hjælp af den følgende SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Skift til dataarkvisning, og så bør du kunne se de følgende resultater:

    By

    Filter

    <Alle>

    *

    Bellevue

    Bellevue

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access gennemfører en forening af de ni poster, vist tidligere, med de faste feltværdier <All> og "*".

    Da denne foreningsdelsætning ikke indeholder UNION ALL, returnerer Access kun entydige poster, hvilket betyder, at hver by kun returneres én gang med faste identiske værdier.

  5. Nu hvor du har fuldført en foreningsforespørgsel, hvor hvert bynavn kun vises én gang sammen med en indstilling, der effektivt vælger alle byer, kan du bruge denne forespørgsel som postkilde for et kombinationsfelt på en formular. Du kan bruge dette specifikke eksempel som en model til at oprette et kombinationsfeltelement på en formular, angive denne forespørgsel som dets postkilde, angive egenskaben Kolonnebredde på filterkolonnen til 0 (nul) for at skjule den visuelt og derefter angive bundkolonnens egenskab til 1 for at vise indekset for den anden kolonne. I egenskaben Filter i selve formularen kan du derefter tilføje kode såsom den følgende for at aktivere et formularfilter ud fra værdien af det, der blev valgt i kombinationsfeltelementet:

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

    Brugeren af formularen kan derefter filtrere formularens poster efter et specifikt bynavn eller vælge <All> for at få vist en liste over alle poster for alle byer.

Til toppen af siden

Udvid dine Office-færdigheder
Gå på opdagelse i kurser
Få nye funktioner først
Bliv Office Insider

Var disse oplysninger nyttige?

Tak for din feedback!

Tak for din feedback! Det lyder, som om det vil kunne hjælpe, hvis du bliver sat i forbindelse med en af vores Office-supportteknikere.

×