Använd en unionsfråga för att kombinera flera frågor till ett resultat

Använd en unionsfråga för att kombinera flera frågor till ett resultat

Obs!:  Vi vill kunna erbjuda dig bästa möjliga supportinnehåll så fort som möjligt och på ditt språk. Den här sidan har översatts med hjälp av automatiserad översättning och kan innehålla grammatiska fel eller andra felaktigheter. Vår avsikt är att den här informationen ska vara användbar för dig. Vill du berätta för oss om informationen är till hjälp längst ned på sidan? Här är artikeln på engelska som referens.

Ibland kanske du vill visa en lista över poster från en tabell eller fråga med dem som kommer från en eller flera andra tabeller att bilda en uppsättning poster – en lista med alla poster från två eller flera tabeller. Det här är syftet med en unionsfråga i Access.

Om du vill förstå effektivt unionsfrågor, bör du först känna till utforma grundläggande urvalsfrågor i Access. Mer information om hur du utformar urvalsfrågor finns i Skapa en enkel urvalsfråga.

Obs!: Innehållet i den här artikeln är avsedd att användas med Access-skrivbordsdatabaser. Du kan inte skapa eller använda en unionsfråga i Access webbdatabaser eller Access-webbprogram.

Studera några arbetsexempel union-fråga

Om du aldrig har skapat en unionsfråga innan kan du vara praktiskt att första undersökning några arbetsexempel i Northwind Access-mall. Du kan söka efter Northwind exempelmallen på sidan för få igång i Access genom att klicka på Arkiv > Nytt eller direkt hämta en kopia från den här platsen: Northwind exempelmallen.

Stäng dialogrutan inloggningsformuläret som visas först och sedan utvidga navigeringsfönstret när Access öppnar Northwind-databasen. Klicka högst upp i navigeringsfönstret och välj sedan Objekttyp att organisera alla databasobjekt efter typ.. I nästa steg ska expandera gruppen frågor och du får en fråga som heter Produkttransaktioner.

Unionsfrågor är lätt att skilja från andra fråga objekt eftersom de har en särskild ikon som liknar två sammanflätade cirklar som representerar en united uppsättning från två uppsättningar:

Skärmdump av en union-fråga i Access.

Till skillnad från normal pekare och redigeringsfrågor relaterade tabeller inte i en unionsfråga, vilket betyder att Access grafiska frågedesignern inte kan användas för att skapa eller redigera unionsfrågor. Du får det här om du öppnar en unionsfråga från navigeringsfönstret. Öppnas det och visa resultatet i databladsvyn. Du märker att Design-vyn inte är tillgängliga när du arbetar med unionsfrågor under kommandot vyer på fliken Start. Du kan bara växla mellan Datablad och SQL när du arbetar med unionsfrågor.

Om du vill fortsätta en undersökning av exemplet union-fråga klickar du på Start > vyer > SQL-vy för att visa SQL-syntax som definierar den. Vi har lagt till några extra avstånd i SQL så att du enkelt kan se de olika delarna som tillsammans bildar en unionsfråga i den här bilden.

Visuella exempel på en unionsfråga i SQL-vy från Northwind exempel Access-mall.

Nu ska vi undersöka SQL-syntax för den här unionsfråga från 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;

Först och de tredje delarna av den här SQL-uttryck är huvudsakligen två urvalsfrågor. Dessa frågor hämta två olika uppsättningar av poster. en från tabellen Produktorder och en från tabellen Produktinköp .

Den andra delen av den här SQL-uttryck är UNION -nyckelordet som talar Access att frågan kombinera dessa två uppsättningar med poster.

Den sista delen av den här SQL-uttryck avgör sorteringsordningen för de kombinerade posterna med hjälp av en ORDER BY -sats. I det här exemplet kommer Access ordningen på alla poster efter fältet Orderdatum i fallande ordning.

Obs!: Unionsfrågor är alltid skrivskyddade i Access. Du kan inte ändra värden i databladsvyn.

Skapa en unionsfråga genom att skapa och kombinera urvalsfrågor

Trots att du kan skapa en unionsfråga genom att skriva direkt SQL-syntax i SQL-vyn, kan det vara lättare att skapa i delar med select-frågor. Du kan sedan kopiera och klistra in SQL-delar i en kombinerad unionsfråga.

Om du vill hoppa över läsa anvisningarna och i stället titta på ett exempel finns i nästa avsnitt, Titta på ett exempel på bygga en unionsfråga.

  1. Klicka på Frågedesign i gruppen Frågor på fliken Skapa.

  2. Dubbelklicka på tabellen som innehåller fälten som du vill inkludera i dialogrutan Visa tabell. Tabellen läggs till i frågedesignfönstret.

  3. Stäng dialogrutan Visa tabell.

  4. Dubbelklicka på var och en av de fält som du vill ska ingå i frågedesignfönstret. Se till att du lägger till samma antal fält i samma ordning, att du lägger till de andra select-frågorna som du väljer fält. Betala noggrann till datatyper i fälten och se till att de har kompatibla datatyper med fält i samma position i de andra frågor som du kombinerar. Om ditt första urvalsfråga har fem fält, först som innehåller datum/tid-data, se till att var och en av de andra select-frågor som du kombinerar också har fem fält, först som innehåller datum/tid-data, och så vidare.

  5. Om du vill lägga till villkor till fälten skriver lämpliga uttryck i raden villkor i rutnätet.

  6. När du är klar med att lägga till fält och fältvillkor ska du köra urvalsfrågan och granska dess utdata. Klicka på Kör på fliken Design i gruppen resultat.

  7. Växla frågan till designvyn.

  8. Spara Select-frågan och lämna den öppen.

  9. Upprepa den här proceduren för var och en av de Select-frågor du vill kombinera.

Nu när du har skapat din select-frågor är det dags att kombinera dem. I det här steget kan skapa du unionsfrågan genom att kopiera och klistra in SQL-uttryck.

  1. Klicka på Frågedesign i gruppen Frågor på fliken Skapa.

  2. Stäng dialogrutan Visa tabell.

  3. På fliken Design i gruppen fråga klickar du på Union. Access döljer frågedesignfönstret och visar fliken SQL visa objekt. Fliken SQL visa objektet är nu tom.

  4. Klicka på fliken för den första Select-frågan du vill kombinera i unionsfrågan.

  5. På fliken Start klickar du på Visa > SQL-vy.

  6. Kopiera SQL-uttrycket för select-frågan. Klicka på fliken för unionsfrågan som du började skapa tidigare.

  7. Klistra in SQL-uttrycket för Select-frågan på unionsfrågans objektflik för SQL-vyn.

  8. Ta bort semikolonet (;) som ligger i slutet av Select-frågans SQL-uttryck.

  9. Tryck på RETUR för att flytta markören nedåt en rad och skriv sedan UNION på den nya raden.

  10. Klicka på fliken för nästa Select-fråga som du vill kombinera i unionsfrågan.

  11. Upprepa steg 5 till 10 för den här proceduren tills du har kopierat och klistrat in alla SQL-uttryck för Select-frågor i SQL-vyn för unionsfrågan. Ta inte bort semikolon eller skriv något efter SQL-uttrycket för den senaste Select-frågan.

  12. Klicka på Kör i gruppen Resultat på fliken Design.

Resultaten av unionsfrågan visas i databladsvyn.

Titta på ett exempel på bygga en unionsfråga

Här är ett exempel som du kan återskapa i Northwind-exempeldatabasen. Denna unionsfråga samlar in namnen på personer från tabellen kunder och kombinera dem med namnen på personer från tabellen leverantörer . Om du vill följa dem gå igenom stegen i ditt exemplar av Northwind-exempeldatabasen.

Visuella exempel för att skapa en unionsfråga i Northwind exempel Access-mall.

Här är stegen nödvändigt att skapa det här exemplet:

  1. Skapa två urvalsfrågor som heter Fråga1 och fråga2 med tabellerna Kunder och produkter respektive som datakällor. Med hjälp av förnamn och efternamn med fält som visar värden.

  2. Skapa en ny fråga som heter Query3 ingen datakälla först och klicka sedan på kommandot Union på fliken Design så att den här frågan till en unionsfråga.

  3. Kopiera och klistra in SQL-uttryck från Fråga1 och fråga2 Query3. Se till att ta bort extra semikolon och lägga till i nyckelordet UNION. Du kan sedan kontrollera resultatet i databladsvyn.

  4. Lägg till i en beställning satsen i någon av frågorna och klistra sedan in ORDER BY-sats i unionsfrågan SQL-vy. Observera att i Query3, union-fråga när den ordning som ska läggas, först semikolon tas bort, och sedan tabellnamn från fältnamnen.

  5. Den slutliga SQL som kombinerar och sorterar i det här exemplet unionsfråga är följande:

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

Om du vet mycket skriva SQL-syntax visserligen kan du skriva en egen SQL-uttrycket för unionsfrågan direkt till SQL visa. Men kan det vara praktiskt följa metoden för kopiera och klistra in SQL från andra fråga objekt. Varje fråga kan vara mycket mer komplicerad än enkel urvalsfråga exemplen används här. Det kan vara till din fördel med att skapa och testa varje fråga noggrant innan du kombinera i unionsfrågan. Om det inte går att köra unionsfrågan visas kan du justera varje fråga individuellt tills den lyckas och sedan återskapa unionsfrågan med rätt syntax.

Gå igenom de återstående avsnitten i den här artikeln om du vill ta reda på Mer tips och råd om hur du använder unionsfrågor.

I exemplet i det föregående avsnittet använder Northwind-databasen kombineras endast data från två tabeller. Du kan dock kombinera tre eller fler tabeller lätt i en unionsfråga. Till exempel kanske skapar på det föregående exemplet kan du vill också innehålla namnen på de anställda i frågeresultatet. Du kan utföra aktiviteten genom att lägga till en tredje frågan och kombinera med föregående SQL-uttrycket med ett ytterligare UNION-nyckelordet så här:

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 visar resultatet i databladsvyn, visas alla anställda med exempel företagets namn som antagligen inte är mycket praktiskt. Om du vill att fältet att ange om en person är anställd inom företaget, från en leverantör eller från en kund, du kan ta med fasta värden i stället för företagets namn. Här är hur SQL skulle 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];

Här visas hur resultatet i databladsvyn. Dessa fem Exempelposter visas i Access:

Anställning

Efternamn

Förnamn

Inom företaget

Freehafer

Nancy

Inom företaget

Giussani

Laura

Leverantör

Glasson

Stuart

Kunden

Goldschmidt

Mikael

Kunden

Gratacos Solsona

Antonio

Frågan ovan kan försämras ytterligare eftersom namnen på resultatfält läses endast från den första frågan i en unionsfråga. Du ser här vi har tagit bort resultatet från andra och tredje fråga avsnitt:

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

Beställa tillåts endast en gång i en unionsfråga för Access, men varje fråga kan filtreras individuellt. Bygger på föregående avsnitt unionsfråga här är ett exempel på där vi har filtrerat var och en fråga genom att lägga till en WHERE-sats.

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

Växla till databladet och du ser resultatet ut så här:

Anställning

Efternamn

Förnamn

Leverantör

Andersen

Elizabeth A.

Inom företaget

Freehafer

Nancy

Kunden

Hasselberg

Jonas

Inom företaget

Hellung-Larsen

Anne

Leverantör

Hernandez Echevarria

Amaya

Kunden

Mortensen

Sven

Leverantör

Sandberg

Mikael

Leverantör

Sabzevari

Hanif

Inom företaget

Thorpe

Steven

Leverantör

Weiler

Cornelia

Inom företaget

Zare

Robert

Om du markant frågor till unionen kan du kan stöta på en situation där ett fält för utdata måste kombinera data på olika datatyper. Om Ja, unionsfrågan oftast returnerar resultatet som datatypen text eftersom den datatypen kan innehålla både text och tal.

Om du vill förstå hur det här fungerar ska vi använda Produkttransaktioner unionsfrågan i Northwind-exempeldatabasen. Öppna den exempeldatabasen och öppna sedan produkttransaktioner frågan i databladsvyn. De senaste tio posterna ser ut ungefär så här utdata:

Produkt-ID

Orderdatum

Företagets namn

Transaktion

Antal

77

1/22/2006

Leverantör B

Köp

60

80

1/22/2006

Leverantör D

Köp

75

81

1/22/2006

Leverantör A

Köp

125

81

1/22/2006

Leverantör A

Köp

200

7

1/20/2006

Företag D

Försäljning

10

51

1/20/2006

Företag D

Försäljning

10

80

1/20/2006

Företag D

Försäljning

10

34

1/15/2006

Företag AA

Försäljning

100

80

1/15/2006

Företag AA

Försäljning

30

Låt oss anta att du vill dela antal fält i två - köpa och sälja. Låt oss även anta att du vill ha en fast noll värde för fältet utan värde. Här är hur SQL ser ut för den här union-fråga:

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; 

Om du växlar till databladsvyn visas de senaste tio poster visas nu som följande:

Produkt-ID

Orderdatum

Företagets namn

Transaktion

Köp

Sälja

74

1/22/2006

Leverantör B

Köp

20

0

77

1/22/2006

Leverantör B

Köp

60

0

80

1/22/2006

Leverantör D

Köp

75

0

81

1/22/2006

Leverantör A

Köp

125

0

81

1/22/2006

Leverantör A

Köp

200

0

7

1/20/2006

Företag D

Försäljning

0

10

51

1/20/2006

Företag D

Försäljning

0

10

80

1/20/2006

Företag D

Försäljning

0

10

34

1/15/2006

Företag AA

Försäljning

0

100

80

1/15/2006

Företag AA

Försäljning

0

30

Fortsätter i det här exemplet, vad händer om du vill använda fält med noll ska vara tom? Du kan ändra SQL om du vill visa ingenting i stället för noll genom att lägga till Null-nyckelord som följande:

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 kanske har växla till databladsvyn, har nu du ett oväntat resultat. Alla fält i kolumnen köp tas bort:

Produkt-ID

Orderdatum

Företagets namn

Transaktion

Köp

Sälja

74

1/22/2006

Leverantör B

Köp

77

1/22/2006

Leverantör B

Köp

80

1/22/2006

Leverantör D

Köp

81

1/22/2006

Leverantör A

Köp

81

1/22/2006

Leverantör A

Köp

7

1/20/2006

Företag D

Försäljning

10

51

1/20/2006

Företag D

Försäljning

10

80

1/20/2006

Företag D

Försäljning

10

34

1/15/2006

Företag AA

Försäljning

100

80

1/15/2006

Företag AA

Försäljning

30

Varför det händer är eftersom det avgör datatyper i fälten från den första frågan. I det här exemplet är är Null inte ett tal.

Så vad händer om du försöker och infoga en tom sträng för fält tomt värde? SQL för den här försök kan se ut ungefär så här:

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 växlar till databladsvyn ser du Access hämtar köp värden, men det konvertera värdena till text. Du kan se det här är textvärden eftersom de är vänsterjusterade i databladsvyn. En tom sträng i den första frågan är inte ett tal som är varför du ser resultaten. Du märker också att sälja värden konverteras till text eftersom köp poster innehåller en tom sträng.

Produkt-ID

Orderdatum

Företagets namn

Transaktion

Köp

Sälja

74

1/22/2006

Leverantör B

Köp

20

77

1/22/2006

Leverantör B

Köp

60

80

1/22/2006

Leverantör D

Köp

75

81

1/22/2006

Leverantör A

Köp

125

81

1/22/2006

Leverantör A

Köp

200

7

1/20/2006

Företag D

Försäljning

10

51

1/20/2006

Företag D

Försäljning

10

80

1/20/2006

Företag D

Försäljning

10

34

1/15/2006

Företag AA

Försäljning

100

80

1/15/2006

Företag AA

Försäljning

30

Så hur du för att lösa det här pussel?

En lösning är att tvinga frågan kommer att hända fältvärdet ska vara ett tal. Det kan utföras med uttryck:

IIf(False, 0, Null)

Villkor som ska kontrolleras, Falsekan vara aldrig sannakan därför uttrycket returnerar alltid Null, men Access fortfarande utvärderar båda Utdataalternativ och beslutar utdata ska numeriska eller har värdet Null.

Här är hur vi kan använda det här uttrycket i vår arbetsexempel:

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;

Observera att det inte är nödvändigt att ändra den andra frågan.

Om du växlar till databladsvyn visas nu ett resultat som vi vill:

Produkt-ID

Orderdatum

Företagets namn

Transaktion

Köp

Sälja

74

1/22/2006

Leverantör B

Köp

20

77

1/22/2006

Leverantör B

Köp

60

80

1/22/2006

Leverantör D

Köp

75

81

1/22/2006

Leverantör A

Köp

125

81

1/22/2006

Leverantör A

Köp

200

7

1/20/2006

Företag D

Försäljning

10

51

1/20/2006

Företag D

Försäljning

10

80

1/20/2006

Företag D

Försäljning

10

34

1/15/2006

Företag AA

Försäljning

100

80

1/15/2006

Företag AA

Försäljning

30

Ett annat sätt att uppnå samma resultat genom att lagt till frågorna i unionsfrågan med ännu en annan fråga:

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

För varje fält returneras fasta värden datatyp som du definierar. Naturligtvis kan vilja du förhindra resultatet av den här frågan störa resultatet så att lura att undvika som är att lägga till en WHERE-sats som FALSKT:

WHERE False

Det här är en liten lura eftersom det här är alltid false och sedan frågan inte returnerar något. Kombinera sekretesspolicyn med befintliga SQL och vi kommer till en slutförd uttrycket på följande sätt:

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 kombinerade frågan returnerar i det här exemplet använder Northwind-databasen 100 poster två enskilda frågor returnerar 58 och 43 poster ger totalt 101 poster. Anledningen för skillnaden är att två poster inte är unika. Finns i avsnittet arbeta med poster som är olika i unionsfrågor med hjälp av UNION ALLkan du lära dig hur du löser det här scenariot med hjälp av UNION ALL.

Ett specialfall för en unionsfråga är att kombinera en uppsättning poster med en post som innehåller summan av ett eller flera fält.

Här är ett annat exempel som du kan skapa i Northwind-exempeldatabasen som illustrerar hur du kan få en summa i en unionsfråga.

  1. Skapa en ny enkel fråga om du vill visa köp av öl (produkt-ID = 34 i Northwind-databasen) med följande SQL-syntax:

    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. Växla till databladet och du bör se fyra inköp:

    Mottaget

    Antal

    1/22/2006

    100

    1/22/2006

    60

    4/4/2006

    50

    4/5/2006

    300

  3. Skapa en enkel aggregating fråga med följande SQL för att få totalen:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Växla till databladet och du bör se bara en post:

    MaxOfDate tas emot

    SumOfQuantity

    4/5/2006

    510

  5. Kombinera följande två frågor i en unionsfråga för att lägga till posten med det totala antalet till kö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. Växla till databladet och du bör se fyra inköp med summan av varje följt av en post som summeras antalet:

    Mottaget

    Antal

    1/22/2006

    60

    1/22/2006

    100

    4/4/2006

    50

    4/5/2006

    300

    4/5/2006

    510

Som handlar om grunderna i att lägga till summor i en unionsfråga. Du kanske också vill ta med fasta värden i båda frågor, till exempel ”detalj” och ”totalt” för att visuellt separera den totala posten från andra poster. Du kan granska med fasta värden i avsnittet kombinera tre eller flera tabeller eller frågor i en unionsfråga.

Unionsfrågor i Access som standard innehåller bara poster som är olika. Men vad händer om du vill ta med alla poster? Ett annat exempel kan vara användbart här.

I avsnittet ovan visar vi dig hur du skapar en totalsumma i en unionsfråga. Ändra den unionsfrågan SQL att inkludera 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];

Växla till databladet och du bör se ett något missvisande resultat:

Mottaget

Antal

1/22/2006

100

1/22/2006

200

En post returnerar inte förstås två gånger antalet totalt.

Anledningen du ser det här resultatet är att en dag såldes av samma mängd choklad två gånger – som lagrats i tabellen Orderdetaljer för inköp. Här är en enkel urvalsfråga resultatet med båda posterna i Northwind-databasen:

Inköpsordernummer

Produkt

Antal

100

Northwind Traders choklad

100

92

Northwind Traders choklad

100

Du kan se att fältet Inköpsordernummer inte finns med och att de två fälten inte utgör två poster som är olika i unionsfrågan ovanstående.

Om du vill ta med alla poster ska använda UNION ALL istället för UNION i din SQL. Här kommer mest troliga påverka sortering av resultat, så du kan också innehålla en ORDER BY-sats för att bestämma en sorteringsordning. Här är den modifierade SQL building av exemplet ovan:

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

Växla till databladet och du bör se alla detaljer förutom totalt som den sista posten:

Mottaget

Summa

Antal

1/22/2006

100

1/22/2006

100

1/22/2006

Summa

200

Vanliga användningen för en unionsfråga ska fungera som datakälla för en kombinationsruta i ett formulär. Du kan använda den kombinationsrutan för att välja ett värde för att filtrera posterna i formuläret. Till exempel filtrera posterna efter deras ort.

Här är ett till exempel att du kan skapa i Northwind-exempeldatabasen att illustrera det här scenariot om du vill se hur det fungerar.

  1. Skapa en enkel urvalsfråga med följande SQL-syntax:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Växla till databladet vy och du bör läsa följande resultat:

    Ort

    Filter

    Seattle

    Seattle

    Bellevue

    Bellevue

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Visning av de resultat du kanske inte ser en massa värde. Expandera frågan genom och transformera dem till en unionsfråga med hjälp av följande SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Växla till databladet vy och du bör läsa följande resultat:

    Ort

    Filter

    < alla >

    *

    Bellevue

    Bellevue

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Utförs en union nio poster tidigare visas med fast fältvärden i < alla > och ”*”.

    Eftersom den här union-satsen inte innehåller UNION ALL, returneras bara distinkta poster vilket betyder att varje stad returneras endast en gång med fasta identiska värden.

  5. Nu när du har en färdig unionsfråga som visar varje orten när tillsammans med ett alternativ som effektivt markerar alla städer kan använda du den här frågan som datakälla för en kombinationsruta i ett formulär. Använder det här exemplet som en mall kan kan du skapa en kombinationsruta i ett formulär, ange den här frågan datakälla, egenskapen kolumnbredden för kolumnen Filter till 0 (noll) om du vill dölja visuellt och ange egenskapen Bunden kolumn 1 för att ange indexet i den andra kolumnen. I egenskapen Filter i själva formuläret kan du lägga i koden, till exempel följande om du vill aktivera ett formulärfilter genom att använda värdet av vad du har valt i kontrollen kombinationsruta:

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

    Användare av formuläret kan sedan filtrera poster formulär till en viss ort namn eller markera < alla > att lista alla poster för alla städer.

Överst på sidan

Utöka dina Office-kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Office Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×