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

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

Bemærk!:  Vi vil gerne give dig den mest opdaterede hjælp, så hurtigt vi kan, på dit eget sprog. Denne side er oversat ved hjælp af automatisering og kan indeholde grammatiske fejl og unøjagtigheder. Det er vores hensigt, at dette indhold skal være nyttigt for dig. Vil du fortælle os, om oplysningerne var nyttige for dig, nederst på denne side? Her er artiklen på engelsk så du kan sammenligne.

Nogle gange vil du måske gerne liste over poster fra én tabel eller forespørgsel med poster fra en eller flere andre tabeller til at danne ét sæt af poster – en liste med alle poster fra to eller flere tabeller. Dette er formålet med en foreningsforespørgsel i Access.

For at forstå effektivt foreningsforespørgsler, skal du først have kendskab til design af grundlæggende select-forespørgsler i Access. Hvis du vil vide mere om at designe udvælgelsesforespørgsler, kan du se oprette en enkel udvælgelsesforespørgsel.

Bemærk!: Indholdet i denne artikel er beregnet til brug med Access-skrivebordsdatabaser. Du kan ikke oprette eller bruge en foreningsforespørgsel i Access webdatabaser eller Access-webapps.

Læse et arbejdseksempel foreningsforespørgsel

Hvis du aldrig har oprettet en foreningsforespørgsel før, kan du finde det nyttigt at første undersøgelse et arbejdseksempel i Northwind Access-skabelon. Du kan søge efter skabelonen Northwind eksempel på siden Introduktion til Introduktion i Access ved at klikke på filer > Ny, eller du kan direkte hente en kopi fra denne placering: Northwind eksempel på en skabelon.

Når Access åbner Northwind-databasen, Afvis logonformularen-dialogboks, der vises først og derefter udvide navigationsruden. Klik på øverst i navigationsruden, og vælg derefter Objekttype til at organisere alle databaseobjekter efter type. Dernæst skal vise gruppen forespørgsler, og du får vist en forespørgsel med navnet Produkt transaktioner.

Foreningsforespørgsler er nemt at skelne fra andre forespørgsel objekter, fordi de har et særligt ikon, der ligner to intertwined cirkler, der repræsenterer et Forenede sæt fra to sæt:

Skærmbillede af en foreningsforespørgsel i Access.

I modsætning til normal markering og handlingsforespørgsler relaterede tabeller er ikke i en foreningsforespørgsel, hvilket betyder, at den grafiske Forespørgselsdesigner ikke kan bruges til at oprette eller redigere foreningsforespørgsler adgang. Du kan opleve dette, hvis du åbner en foreningsforespørgsel fra navigationsruden. Åbnes det, og få vist resultaterne i dataarkvisning. Under kommandoen visninger under fanen Startside, vil du bemærke, 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.

For at fortsætte med din undersøgelse af eksemplet foreningsforespørgsel, skal du klikke på Hjem > visninger > SQL-visning for at få vist den SQL-syntaks, der definerer den. Vi har tilføjet nogle ekstra afstand i SQL i denne illustration, så du nemt kan se de forskellige dele, der udgør en foreningsforespørgsel.

Visuelle eksempel på en foreningsforespørgsel i SQL-visning fra Northwind eksempel Access-skabelon.

Lad os undersøge SQL-syntaks for denne foreningsforespørgsel fra Northwind-databasen detaljeret:

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 den tredje del af denne SQL-sætning er grundlæggende to udvælgelsesforespørgsler. Disse forespørgsler henter to forskellige sæt af poster. en undtagelse fra tabellen Produktordrer og én fra tabellen Produktkøb .

Den anden del af denne SQL-sætning er nøgleordet UNION som fortæller Access, at denne forespørgsel kan kombinere 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 vil Access Bestil alle poster ved feltet Ordredato i faldende rækkefølge.

Bemærk!: Foreningsforespørgsler er altid skrivebeskyttede i Access. Du kan ikke ændre en hvilken som helst værdier i dataarkvisning.

Oprette en foreningsforespørgsel ved at oprette og kombinerer udvælgelsesforespørgsler

Selvom du kan oprette en foreningsforespørgsel ved at skrive direkte på SQL-syntaks i SQL-visning, kan det være nemmere at opbygge i dele med udvælgelsesforespørgsler. Du kan derefter kopiere og indsætte SQL delene i en kombinerede foreningsforespørgsel.

Hvis du vil springe over læse trinnene og i stedet for at se et eksempel, kan du se næste afsnit, se et eksempel på opbygning 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å hver af de felter, du vil medtage i designvinduet for forespørgslen. Når du vælger felter, Sørg for, at du tilføje det samme antal felter i samme rækkefølge, der føjes til de anden select-forespørgsler. Læg mærke til datatyperne for felterne, og Sørg for, at de har kompatible datatyper med felter i den tilsvarende position i de andre forespørgsler, der kombinerer du. For eksempel hvis udvælgelsesforespørgslen første har fem felter, hvoraf først indeholder data, dato og klokkeslæt, skal du kontrollere, at hver af de andre udvælgelsesforespørgsler, kombinerer du også har fem felter, hvoraf først indeholder data, dato og klokkeslæt, og så videre.

  5. Du kan også føje kriterier til dine felter ved at skrive de relevante udtryk i rækken kriterier for feltgitteret.

  6. Når du er færdig med at tilføje felter og feltkriterier, skal du køre udvælgelsesforespørgslen og gennemse dens output. 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 udvælgelsesforespørgsler, er det tid til at kombinere dem. I dette trin skal oprette du foreningsforespørgslen ved at kopiere og indsætte SQL-sætninger.

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

  2. Luk dialogboksen Vis tabel.

  3. Klik på Union i gruppen forespørgsel under fanen Design. Access skjuler forespørgselsdesignvinduet og viser fanen SQL Vis objekt. På dette tidspunkt er SQL-visning objektfane tom.

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

  5. Under fanen Startside, klik på Vis > SQL-visning.

  6. Kopiere SQL-sætningen for udvælgelsesforespørgslen. Klik på fanen for foreningsforespørgslen, du har startet til 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.

Resultatet af foreningsforespørgslen vises i dataarkvisning.

Se et eksempel på opbygning af en foreningsforespørgsel

Her er et eksempel, som du kan genskabe i Northwind eksempeldatabasen. Denne foreningsforespørgsel indsamler navnene på de personer fra tabellen kunder og kombinerer dem med navnene på de personer fra tabellen leverandører . Hvis du vil følge med, kan du arbejde med disse trin i din kopi af Northwind-eksempeldatabasen.

Visuelle eksempel oprettelse af en foreningsforespørgsel i Northwind eksempel Access-skabelon.

Her er trinnene nødvendigt at opbygge i dette eksempel:

  1. Opret to udvælgelsesforespørgsler titlen Query1 og Query2 med tabellerne Kunder og produkter henholdsvis som datakilder. Bruge fornavn og efternavn felter, som viser værdier.

  2. Oprette en ny forespørgsel, der oprindeligt blev kaldt Query3 med nogen datakilde, og klik derefter på Union kommandoen under fanen Design til at gøre denne forespørgsel til en foreningsforespørgsel.

  3. Kopiere og indsætte SQL-sætningerne fra Query1 og Query2 i Query3. Sørg for at fjerne ekstra semikolon og tilføje i nøgleordet UNION. Derefter kan du se resultaterne i dataarkvisning.

  4. Tilføje i delsætningen bestilling i en af forespørgslerne, og derefter indsætte sætningen ORDER BY i foreningsforespørgslen SQL-visning. Bemærk, at i Query3, foreningsforespørgslen, når den rækkefølge, der er ved at blive føjet først semikolonerne er fjernet, og derefter tabelnavn fra feltnavnene.

  5. Den endelige SQL, der kombinerer og sorterer navnene i dette eksempel foreningsforespørgsel 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 vant til meget skriver SQL-syntaks, du kan selvfølgelig skrive din egen SQL-sætningen for foreningsforespørgslen direkte i SQL få vist. Dog kan det være praktisk at følge fremgangsmåden for at kopiere og indsætte SQL fra andre forespørgsel objekter. Hver forespørgsel kan være meget mere kompliceret end enkel udvælgelsesforespørgsel eksemplerne bruges her. Det kan være til din egen fordel til at oprette og teste hver forespørgsel grundigt, før du kombinerer dem i foreningsforespørgslen. Hvis foreningsforespørgslen ikke kan køre, kan du justere hver forespørgsel enkeltvis, indtil det lykkes, og derefter genopbygge foreningsforespørgslen med korrekt syntaks.

Gennemgå de resterende afsnit i denne artikel for at få flere tip og gode råd om brug af foreningsforespørgsler.

I eksemplet fra den forrige sektion ved hjælp af Northwind-databasen, kombineres kun data fra to tabeller. Du kan dog kombinere tre eller flere tabeller meget nemt i en foreningsforespørgsel. For eksempel kan bygger på det forrige eksempel, du få også indeholde navnene på de medarbejdere i forespørgslens output. Du kan udføre denne opgave ved at tilføje en tredje forespørgsel og kombinere med forrige SQL-sætningen med et ekstra UNION reserveret således:

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 med eksempel firmanavn, hvilket sandsynligvis ikke praktisk. Hvis du vil dette felt til at angive, om en person er en interne medarbejder, fra en leverandør eller fra en kunde, kan du medtage faste værdier i stedet for firmanavnet. Her er, hvordan SQL ville se således:

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:

Ansættelse

Efternavn

Fornavn

Interne

Freehafer

Nancy

Interne

Giussani

Laura

Leverandør

Glasson

Stuart

Kunde

Goldschmidt

Daniel

Kunde

Gratacos Solsona

Antonio

Den ovenstående forespørgsel kan blive reduceret yderligere, da Access læser kun navnene på outputfelterne fra den første forespørgsel i en foreningsforespørgsel. Her kan du se, vi har fjernet output fra andet og tredje forespørgsel sektioner:

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

Rækkefølge er tilladt kun én gang i en foreningsforespørgsel til Access, men hver forespørgsel kan filtreres enkeltvis. Bygger på den forrige sektion foreningsforespørgsel her er et eksempel på, 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 visning, og du får vist resultaterne nogenlunde sådan ud:

Ansættelse

Efternavn

Fornavn

Leverandør

Andersen

Elizabeth A.

Interne

Freehafer

Nancy

Kunde

Hasselberg

Jonas

Interne

Hellung-Larsen

Anne

Leverandør

Hernandez Echevarria

Amaya

Kunde

Mortensen

Sven

Leverandør

Sandberg

Mikael

Leverandør

Sousa

Luis

Interne

Thorpe

Steven

Leverandør

Weiler

Cornelia

Interne

Zare

Robert

Hvis forespørgsler Union er meget forskelligt, kan du støde på en situation, hvor et outputfelt af skal kombinere data fra forskellige datatyper. Hvis så foreningsforespørgslen oftest returnerer resultatet som datatypen tekst da denne datatype kan indeholde både tekst og tal.

For at forstå, hvordan dette virker bruger vi Produkt transaktioner foreningsforespørgslen i Northwind eksempeldatabasen. Åbn Northwind, og Åbn derefter forespørgslen produkt transaktioner i dataarkvisning. De ti seneste poster skal ligne dette output:

Produkt-id

Ordredato

Firmanavn

Transaktion

Antal

77

1/22/2006

Leverandør B

Køb

60

80

1/22/2006

Leverandør D

Køb

75

81

1/22/2006

Leverandør A

Køb

125

81

1/22/2006

Leverandør A

Køb

200

7

1/20/2006

Firma D

Udsalg

10

51

1/20/2006

Firma D

Udsalg

10

80

1/20/2006

Firma D

Udsalg

10

34

1/15/2006

Virksomhed å

Udsalg

100

80

1/15/2006

Virksomhed å

Udsalg

30

Lad os antage, du vil antal felt opdelt i to - køb og sælge. Lad os også antage du vil have en fast nul værdi i feltet uden værdi. Her er, hvordan SQL ser ud til 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 ti seneste poster, der nu vises som følger:

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælger

74

1/22/2006

Leverandør B

Køb

20

0

77

1/22/2006

Leverandør B

Køb

60

0

80

1/22/2006

Leverandør D

Køb

75

0

81

1/22/2006

Leverandør A

Køb

125

0

81

1/22/2006

Leverandør A

Køb

200

0

7

1/20/2006

Firma D

Udsalg

0

10

51

1/20/2006

Firma D

Udsalg

0

10

80

1/20/2006

Firma D

Udsalg

0

10

34

1/15/2006

Virksomhed å

Udsalg

0

100

80

1/15/2006

Virksomhed å

Udsalg

0

30

Fortsætter i dette eksempel, hvad nu, hvis du vil felterne med nul, skal være tom? Du kan redigere SQL-koden for at få vist noget i stedet for nul ved at tilføje i nøgleordet Null ud 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;

Men, som du muligvis har observeret Skift til dataarkvisning, du har nu et uventet resultat. I kolonnen køb slettes alle felter:

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælger

74

1/22/2006

Leverandør B

Køb

77

1/22/2006

Leverandør B

Køb

80

1/22/2006

Leverandør D

Køb

81

1/22/2006

Leverandør A

Køb

81

1/22/2006

Leverandør A

Køb

7

1/20/2006

Firma D

Udsalg

10

51

1/20/2006

Firma D

Udsalg

10

80

1/20/2006

Firma D

Udsalg

10

34

1/15/2006

Virksomhed å

Udsalg

100

80

1/15/2006

Virksomhed å

Udsalg

30

Der er årsagen til dette sker, fordi Access bestemmer datatyperne for felter fra den første forespørgsel. I dette eksempel er Null ikke et tal.

Så Hvad sker der, hvis du prøver og indsætte en tom streng til den tomme værdi af felterne? SQL-Sætningen til denne forsøg kan se ud som følgende:

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, ser du, at Access henter værdierne køb, men den konverteret værdierne til tekst. Du kan se dette er tekstværdier, fordi de er venstrejusteret i dataarkvisning. En tom streng i den første forespørgsel er ikke et nummer, der er grunden til, vises disse resultater. Du kan også se, at sælge værdierne også konverteres til tekst, fordi køb poster indeholder en tom streng.

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælger

74

1/22/2006

Leverandør B

Køb

20

77

1/22/2006

Leverandør B

Køb

60

80

1/22/2006

Leverandør D

Køb

75

81

1/22/2006

Leverandør A

Køb

125

81

1/22/2006

Leverandør A

Køb

200

7

1/20/2006

Firma D

Udsalg

10

51

1/20/2006

Firma D

Udsalg

10

80

1/20/2006

Firma D

Udsalg

10

34

1/15/2006

Virksomhed å

Udsalg

100

80

1/15/2006

Virksomhed å

Udsalg

30

Så hvordan du løse dette puzzle?

En løsning er at tvinge forespørgsel kan du forvente værdien i feltet til at være et tal. Det kan gøres med et udtryk:

IIf(False, 0, Null)

Betingelsen, der skal kontrolleres, Falsk, bliver aldrig Sand, og som derfor udtrykket returnerer altid Null, men Access stadig evaluerer begge outputindstillinger og bestemmer output skal være numerisk eller Null.

Her er, hvordan vi kan bruge dette udtryk i eksemplet arbejde:

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 vist et resultat, vi vil nu:

Produkt-id

Ordredato

Firmanavn

Transaktion

Køb

Sælger

74

1/22/2006

Leverandør B

Køb

20

77

1/22/2006

Leverandør B

Køb

60

80

1/22/2006

Leverandør D

Køb

75

81

1/22/2006

Leverandør A

Køb

125

81

1/22/2006

Leverandør A

Køb

200

7

1/20/2006

Firma D

Udsalg

10

51

1/20/2006

Firma D

Udsalg

10

80

1/20/2006

Firma D

Udsalg

10

34

1/15/2006

Virksomhed å

Udsalg

100

80

1/15/2006

Virksomhed å

Udsalg

30

En anden metode til at opnå det samme resultat er føjes forespørgsler i foreningsforespørgslen med endnu en anden 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 for den datatype, du definerer. Naturligvis ønsker du ikke output fra denne forespørgsel for at forstyrre resultaterne, så stikket til at undgå, der er ved at medtage en WHERE-delsætning til falsk:

WHERE False

Dette er et lille stik, da det er altid false og derefter forespørgslen ikke returnerer noget. Kombinerer denne sætning med eksisterende SQL og vi ankommer til en færdige sætning på følgende måde:

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!: Kombinerede forespørgslen her returnerer i dette eksempel bruger Northwind-databasen 100 poster, mens de to separate forespørgsler returnere 58 og 43 poster i alt 101 poster. Grunden til denne forskel er to poster ikke er entydige. Se afsnittet arbejde med entydige poster i foreningsforespørgsler ved hjælp af UNION ALL, for at lære, hvordan du kan løse dette scenario ved hjælp af UNION ALL.

Der er et særligt tilfælde til en foreningsforespørgsel til at kombinere et sæt poster med én post, der indeholder summen af et eller flere felter.

Her er et andet eksempel, som du kan oprette i Northwind eksempeldatabasen til at illustrere Sådan får du en total i en foreningsforespørgsel.

  1. Oprette en ny Simpel forespørgsel for at få vist kø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. Skift til dataarkvisning visning, og du bør se fire køb:

    Dato, der er modtaget

    Antal

    1/22/2006

    100

    1/22/2006

    60

    4/4/2006

    50

    4/5/2006

    300

  3. For at få totalen, oprette en simpel samle forespørgsel ved hjælp af følgende SQL:

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

    MaxOfDate modtaget

    SumAfAntal

    4/5/2006

    510

  5. Kombinere disse to forespørgsler i en foreningsforespørgsel til at tilføje posten med det samlede antal til køb af 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. Skift til dataarkvisning visning, og du bør se fire køb med summen af hver efterfulgt af en post, der lægger antallet:

    Dato, der er modtaget

    Antal

    1/22/2006

    60

    1/22/2006

    100

    4/4/2006

    50

    4/5/2006

    300

    4/5/2006

    510

Der dækker de grundlæggende regler for tilføjelse af totaler i en foreningsforespørgsel. Du kan også medtage faste værdier i begge forespørgsler såsom "Detaljeret" og "Total" for at adskille visuelt den samlede post fra de andre poster. Du kan gennemse ved hjælp af faste værdier i sektionen kombinere tre eller flere tabeller eller forespørgsler i en foreningsforespørgsel.

Foreningsforespørgsler i Access som standard medtager kun entydige poster. Men hvad nu, hvis du vil medtage alle poster? Et andet eksempel kan være nyttige her.

I det forrige afsnit viste vi dig, hvordan du opretter en total i en foreningsforespørgsel. Ændre den foreningsforespørgsel SQL medtage 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];

Skift til dataarkvisning visning, og du bør se nogenlunde vildledende resultatet:

Dato, der er modtaget

Antal

1/22/2006

100

1/22/2006

200

Én post returnerer ikke naturligvis to gange antallet i alt.

Grunden du får vist dette resultat er på én dag det samme antal chokolade blev solgt to gange – som er registreret i tabellen Ordreoplysninger for køb. Her er en enkel udvælgelsesforespørgsel resultat, der viser begge poster i Northwind-eksempeldatabasen:

Køb ordre-ID

Produkt

Antal

100

Northwind Traders chokolade

100

92

Northwind Traders chokolade

100

I foreningsforespørgslen beskrevet ovenfor, kan du se, at feltet Køb ordre-ID, ikke er medtaget og, at de to felter ikke udgør to entydige poster.

Hvis du vil medtage alle poster, skal du bruge UNION ALL i stedet for UNION i dine SQL. Dette hovedsageligt sandsynligt har indflydelse på sortering af resultaterne, så du kan eventuelt også medtage delsætningen ORDER BY for at finde ud af en sorteringsrækkefølge. Her er ændret SQL building 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];

Skift til dataarkvisning visning, og du bør se alle oplysninger om ud over en total som den sidste post:

Dato, der er modtaget

Total

Antal

1/22/2006

100

1/22/2006

100

1/22/2006

Total

200

Et almindelige brug for en foreningsforespørgsel er skal fungere som postkilden til en kombinationsboks på en formular. Du kan bruge kombinationsboksen til at vælge en værdi til at filtrere formularens poster. For eksempel filtrering af medarbejderposterne efter deres by.

For at se, hvordan det fungerer muligvis skal er her et andet eksempel, at du kan oprette i Northwind eksempeldatabasen til at illustrere dette scenario.

  1. Oprette en enkel udvælgelsesforespørgsel ved hjælp af denne SQL-syntaks:

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

    By

    Filter

    Seattle

    Seattle

    Vejle

    Vejle

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Se på resultaterne, du muligvis ikke vist en masse værdi. Udvid forespørgslen via og transformere den til en foreningsforespørgsel ved hjælp af 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 visning, og du bør se følgende resultater:

    By

    Filter

    < alle >

    *

    Vejle

    Vejle

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access udfører en blanding af ni posterne, tidligere vises med fast feltværdier < alle > og "*".

    Da denne union delsætning ikke indeholder UNION ALL, returnerer Access kun entydige poster, hvilket betyder, at hver enkelt by returneres kun én gang med fast ens værdier.

  5. Nu hvor du har en færdige foreningsforespørgsel viser hver bynavnet kun én gang, sammen med en indstilling, der effektivt markerer alle byer, kan du bruge denne forespørgsel som en postkilde til en kombinationsboks på en formular. Brug af dette bestemte eksempel som en model, kan du oprette en kombinationsboks på en formular, angive denne forespørgsel som postkilde, indstille egenskaben kolonnebredden for kolonnen Filter til 0 (nul) for at skjule det visuelt og derefter angive egenskaben BundetKolonne til 1 for at angive indekset på den anden kolonne. I egenskaben Filter i selve formularen, kan du derefter tilføje kode som følgende for at aktivere et formularfilter ved hjælp af værdien af hvad der blev valgt i kombinationsboksen:

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

    Brugeren i formularen kan derefter filtrere posterne formular til en bestemt by navn eller markere < alle > til at få vist alle poster for alle byer.

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.

×