Utilizarea unei interogări de tip uniune pentru a combina mai multe interogări într-un singur rezultat

Utilizarea unei interogări de tip uniune pentru a combina mai multe interogări într-un singur rezultat

Notă:  Dorim să vă oferim cel mai recent conținut de ajutor, cât mai rapid posibil, în limba dvs. Această pagină a fost tradusă automatizat și poate conține erori gramaticale sau inexactități. Scopul nostru este ca acest conținut să vă fie util. Vă rugăm să ne spuneți dacă informațiile v-au fost utile, în partea de jos a acestei pagini. Aici se află articolul în limba engleză , ca să îl puteți consulta cu ușurință.

Uneori, poate doriți să lista de înregistrări dintr-un tabel sau interogare cu cele din una sau mai multe tabele pentru a forma un set de înregistrări - o listă cu toate înregistrările din două sau mai multe tabele. Acesta este scopul unei interogări de Uniune în Access.

Pentru a înțelege eficient interogările de Uniune, mai întâi trebuie să fie familiarizați cu proiectarea interogărilor de selectare bază în Access. Pentru a afla mai multe despre proiectarea de interogări de selectare, consultați crearea unei interogări de selectare simplă.

Notă: Conținutul din acest articol este destinat pentru utilizare cu bazele de date desktop Access. Nu puteți crea sau utilizați o interogare de Uniune în bazele de date web Access sau aplicațiile web Access.

Un exemplu de interogare de Uniune de lucru de studiu

Dacă nu ați creat o interogare de Uniune înainte, care poate fi util să primul studiu un exemplu de lucru în șablon Northwind Access. Puteți să căutați Northwind eșantion șablon pe funcționarea pagina Noțiuni de bază de acces, făcând clic pe fișier > nou sau puteți să descărcați direct o copie din această locație: Northwind eșantion șablon.

După ce Access deschide baza de date Northwind, închide formularul de dialog conectare care apare pentru prima dată, apoi extindeți panoul de navigare. Faceți clic pe partea de sus a panoului de navigare, apoi selectați Tipul de obiect pentru a organiza toate obiectele bazei de date după tip. În continuare, extindeți grupul interogări și veți vedea o interogare numită Tranzacțiile de produs.

Interogările de Uniune sunt simplu pentru a se diferenția de la alte obiecte de interogare, deoarece acestea au o pictogramă speciale care seamănă cu două cercuri interconectate care reprezintă un set united din două seturi de:

Captură de ecran a unei interogări de Uniune pictograma în Access.

Spre deosebire de selectare normală și interogările de acțiune, tabele nu sunt legate într-o interogare de Uniune, ceea ce înseamnă că Access de proiectare grafică a interogărilor nu pot fi utilizate pentru a construi sau a edita interogările de Uniune. Vă va confrunta cu acest lucru dacă deschideți o interogare de Uniune din panoul de navigare; Access îl deschide și a afișa rezultatele în vizualizarea foaie de date. Sub comanda vizualizări pe fila pornire , veți observa că Vizualizare proiect nu este disponibilă atunci când lucrați cu interogările de Uniune. Doar puteți comuta între Vizualizarea foaie de date și Vizualizarea SQL când lucrați cu interogările de Uniune.

Pentru a continua de studiu de acest exemplu de interogare de Uniune, faceți clic pe pornire > vizualizări > Vizualizare SQL pentru a vizualiza sintaxa SQL care definește-l. În această ilustrație, am adăugat unele spațiere suplimentare în SQL pentru a putea observa cu ușurință părțile diferite care alcătuiesc o interogare de Uniune.

Exemplu vizuală a unei interogări de Uniune în vizualizarea SQL din șablonul de acces Northwind eșantion.

Să studiază sintaxa SQL această interogare de Uniune din baza de date Northwind în detaliu:

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;

Primul și al treilea părți instrucțiunii SQL această sunt, în esență, două interogări de selectare. Aceste interogări regăsi două seturi diferite de înregistrări; una din tabelul Comenzi produs și unul din tabelul de Achiziții produs .

A doua parte a acestui instrucțiune SQL este cuvântul cheie UNION care spune acces că această interogare va combina aceste două seturi de înregistrări.

Ultima parte a acestui instrucțiune SQL determină ordonarea înregistrările combinate utilizând o declarație ORDER BY . În acest exemplu, Access va comanda toate înregistrările de câmpul Data comenzii în ordine descendentă.

Notă: Interogările de Uniune sunt întotdeauna doar în citire în Access; Nu puteți modifica nicio valoare în vizualizarea foaie de date.

Crearea unei interogări de Uniune prin crearea şi combinarea interogări de selectare

Chiar dacă puteți să creați o interogare de Uniune direct scriere sintaxa SQL în vizualizarea SQL, vă pot fi mai ușor să-l construiască în părți cu interogări de selectare. Vă puteți, apoi copiați și lipiți SQL părți într-o interogare de Uniune combinat.

Dacă doriți să treceți la pașii de citire și să urmăriți în schimb un exemplu, consultați secțiunea următoare, urmăriți un exemplu de construirea unei interogări de Uniune.

  1. În fila Creare, în grupul Interogări, faceți clic pe Proiectare interogare.

  2. În caseta de dialog Afișare tabel, faceți dublu clic pe tabelul care are câmpurile pe care doriți să le includeți. Tabelul se adaugă la fereastra de proiectare a interogării.

  3. Închideți caseta de dialog Afișare tabel.

  4. În fereastra de proiectare a interogării, faceți dublu clic pe fiecare dintre câmpurile pe care doriți să le includeți. Pe măsură ce Selectați câmpurile, asigurați-vă că puteți adăuga același număr de câmpuri, în aceeași ordine, adăugați la alte interogări de selectare. Atenție atent tipurile de date de câmpuri, și asigurați-vă că au tipurile de date compatibile cu câmpurile în aceeași poziție în alte interogările care sunt combinarea. De exemplu, dacă interogarea de selectare prima are cinci câmpuri, prima dintre care conține date dată/oră, asigurați-vă că fiecare dintre celelalte interogărilor de selectare care se combină, de asemenea, are cinci câmpuri, prima dintre care conține date dată/oră, și așa mai departe.

  5. Opțional, adăugați criterii la câmpuri tastând expresii adecvate în rândul criterii ale grilei de câmpuri.

  6. După ce ați terminat de adăugat câmpuri și criterii de câmpuri, ar trebui să rulați interogarea de selectare și să revizuiți rezultatul său. Pe fila Proiectare , în grupul Rezultate , faceți clic pe Run.

  7. Comutați interogarea la Vizualizarea proiect.

  8. Salvați interogarea de selectare și lăsați-o deschisă.

  9. Repetați acest procedeu pentru fiecare interogare de selectare pe care o combinați.

Acum că ați creat de interogări de selectare, este timpul să le combină. În acest pas, creați interogarea de Uniune prin copierea și lipirea instrucțiunile SQL.

  1. În fila Creare, în grupul Interogări, faceți clic pe Proiectare interogare.

  2. Închideți caseta de dialog Afișare tabel.

  3. Pe fila Proiectare , în grupul interogare , faceți clic pe Union. Access ascunde fereastra de proiectare interogare și afișează fila obiect SQL vizualizare. În acest moment, fila obiect SQL vizualizare este gol.

  4. Faceți clic pe fila pentru prima interogare de selectare pe care doriți să o combinați în interogarea de uniune.

  5. Pe fila pornire , faceți clic pe Vizualizare > Vizualizare SQL.

  6. Copiați instrucțiune SQL pentru interogarea de selectare. Faceți clic pe fila pentru interogarea de Uniune pe care ați început pentru a crea o versiune anterioară.

  7. Lipiți instrucțiunea SQL pentru interogarea de selectare în fila obiect a Vizualizării SQL a interogării de uniune.

  8. Ștergeți punctul și virgula (;) de la finalul instrucțiunii SQL de interogare de selectare.

  9. Apăsați pe Enter pentru a muta cursorul o linie mai jos și tastați UNION linie nouă.

  10. Faceți clic pe fila pentru următoarea interogare de selectare pe care doriți să o combinați în interogarea de uniune.

  11. Repetați pașii de la 5 la 10 până ce copiați și lipiți toate instrucțiunile SQL pentru interogările de selectare în fereastra de vizualizare SQL a interogării de uniune. Nu ștergeți punctul și virgula și nu tastați nimic după instrucțiunea SQL pentru ultima interogare de selectare.

  12. În fila Proiectare, în grupul Rezultate, faceți clic pe Rulare.

Rezultatele interogării de Uniune apar în vizualizarea foaie de date.

Urmăriți un exemplu de construirea unei interogări de Uniune

Iată un exemplu pe care puteți să creați din nou în baza de date Northwind eșantion. Această interogare de Uniune colectează numele persoanelor din tabelul clienți și le combină cu numele persoanelor din tabelul furnizori . Dacă doriți să urmați-a lungul, parcurgeți acești pași în copia bazei de date Northwind eșantion.

Exemplu vizual ale construirii unei interogări de Uniune din șablonul de acces Northwind eșantion.

Iată pașii necesari pentru a construi acest exemplu:

  1. Creați două interogări de selectare numit Query1 și Query2 cu tabelele de clienți și produsele respectiv ca surse de date. Utilizați câmpurile Prenume și nume de familie așa cum se afișează valorile.

  2. Creați o nouă interogare numită Query3 cu nici o sursă de date inițial și apoi faceți clic pe comanda Uniune pe fila Proiectare pentru a face această interogare într-o interogare de Uniune.

  3. Copiați și lipiți instrucțiunile SQL de Query1 și Query2 Query3. Nu uitați să eliminați punct și virgulă suplimentare și adăugați în cuvântul cheie UNION. Apoi puteți verifica rezultatele în vizualizarea foaie de date.

  4. Adăugați într-o clauză comanda într-unul dintre interogările și apoi lipiți declarația ORDER BY în interogarea de Uniune vizualizarea SQL. Observați că în Query3, interogarea de Uniune, atunci când comanda este de a fi atribuie, mai întâi punct și virgulă sunt eliminate, apoi denumiți tabelul din numele de câmp.

  5. Finală SQL care combină și sortează numele pentru acest exemplu de interogare de Uniune este astfel:

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

Dacă sunteți obișnuit să foarte scriere sintaxa SQL, desigur, aveți posibilitatea să scrieți propriul SQL a confidențialității pentru interogarea de Uniune direct în SQL vizualizare. Cu toate acestea, care poate fi util să urmeze abordare copiați și lipiți SQL din alte obiecte de interogare. Fiecare interogare poate fi mult mai complicată decât exemple de interogare simplă de selectare folosit aici. Poate fi avantajos să creați și să testați fiecare interogare cu atenție înainte de a le combină în interogarea de Uniune. Dacă interogarea de Uniune nu rulează, puteți ajusta fiecare interogare individual până când reușește și apoi reconstrui interogarea de Uniune cu sintaxa corectate.

Revizuiți secțiuni rămase din acest articol pentru a afla mai multe sfaturi și trucuri despre utilizarea interogărilor de Uniune.

În exemplul de secțiunea anterioară utilizând baza de date Northwind, doar datele din două tabele sunt combinate. Cu toate acestea, puteți combina trei sau mai multe tabele foarte ușor într-o interogare de Uniune. De exemplu, bazându-se pe exemplul anterior, poate doriți să, de asemenea, includeți numele angajați în rezultatul interogării. Activități care pot fi realizate prin adăugarea unei interogări de al treilea combinarea cu declarația SQL anterioare cu o cheie UNION suplimentare, astfel:

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

Când Vizualizați rezultatul în vizualizarea foaie de date, toți angajații vor fi listate cu numele de firmă eșantion, care probabil că nu este o caracteristică foarte utilă. Dacă doriți ca acel câmp pentru a indica dacă o persoană este un angajat interne, la un furnizor sau de la un client, puteți să includeți o fixă valoarea în locul numele firmei. Iată cum va arăta SQL:

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

Iată cum se afișează rezultatul în vizualizarea foaie de date. Access afișează aceste înregistrări cinci exemplu:

Angajare

Nume

Prenume

Interne

Freehafer

Daniel

Interne

Giussani

Laura

Furnizor

Glasson

Stuart

Client

Goldschmidt

Daniel

Client

Gratacos Solsona

Antonio

Interogarea de mai sus poate fi redusă și mai mult, deoarece Access doar citește numele câmpurile de ieșire din interogarea prima într-o interogare de Uniune. Aici vedeți am ați eliminat rezultatul din secțiunile al doilea și al treilea interogare:

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

Într-o interogare de Uniune Access, ordonarea este permis o singură dată, dar fiecare interogare pot fi filtrate individual. Construirea în secțiunea anterioară interogare de Uniune, Iată un exemplu de care am ați filtrat fiecare interogare, adăugând o clauză WHERE.

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

Comutarea la foaie de date Vizualizare și veți vedea rezultatele asemănătoare cu aceasta:

Angajare

Nume

Prenume

Furnizor

Andersen

Elizabeth A.

Interne

Freehafer

Daniel

Client

Hasselberg

Jonas

Interne

Hellung Larsen

Cristina

Furnizor

Emil Hernandez

Anca

Client

Mortensen

Sven

Furnizor

Sandberg

Mikael

Furnizor

Bănică

Eugen

Interne

Thorpe

Cornel

Furnizor

Weiler

Cornelia

Interne

Aleg

Daniel

Dacă interogările de Uniune sunt foarte diferite, puteți întâlni o situația în cazul în care un câmp de ieșire trebuie să combinați date din diferite tipuri de date. Dacă da, interogarea de Uniune cel mai des va returna rezultatele ca o date text tastați la că tipul de date pot conține atât text și numere.

Pentru a înțelege cum funcționează, vom utiliza interogarea de Uniune Produs tranzacțiile din baza de date Northwind eșantion. Deschide acea bază de date eșantion, apoi deschideți interogarea produse tranzacțiile în vizualizarea foaie de date. Ultimele zece înregistrările ar trebui să fie similar cu acest rezultat:

ID produs

Data comenzii

Numele firmei

Tranzacție

Cantitate

77

1/22/2006

Furnizor B

Achiziție

60

80

1/22/2006

Furnizor D

Achiziție

75

81

1/22/2006

Furnizor A

Achiziție

125

81

1/22/2006

Furnizor A

Achiziție

200

7

20/1/2006

Firmă D

Vânzare

10

51

20/1/2006

Firmă D

Vânzare

10

80

20/1/2006

Firmă D

Vânzare

10

34

15/1/2006

Firmă AA

Vânzare

100

80

15/1/2006

Firmă AA

Vânzare

30

Să presupunem că doriți divizarea câmp cantitate în două - şi cumpărare. Să presupunem că, de asemenea, care doriți să aibă un fix zero valoare pentru câmpul cu nicio valoare. Iată cum va arăta SQL pentru această interogare de Uniune:

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; 

În cazul în care comutați la vizualizarea foaie de date, veți vedea înregistrările ultimele zece acum afișează cum ar fi următoarele:

ID produs

Data comenzii

Numele firmei

Tranzacție

Cumpărați

Vânzare

74

1/22/2006

Furnizor B

Achiziție

20

0

77

1/22/2006

Furnizor B

Achiziție

60

0

80

1/22/2006

Furnizor D

Achiziție

75

0

81

1/22/2006

Furnizor A

Achiziție

125

0

81

1/22/2006

Furnizor A

Achiziție

200

0

7

20/1/2006

Firmă D

Vânzare

0

10

51

20/1/2006

Firmă D

Vânzare

0

10

80

20/1/2006

Firmă D

Vânzare

0

10

34

15/1/2006

Firmă AA

Vânzare

0

100

80

15/1/2006

Firmă AA

Vânzare

0

30

Continuarea acest exemplu, ce se întâmplă dacă doriți câmpurile cu zero să fie necompletată? Aveți posibilitatea să modificați SQL pentru a afișa nimic în loc de zero, adăugând în cuvântul cheie Null, cum ar fi următoarele:

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;

Cu toate acestea, așa cum s-ar putea avea observate comutați la vizualizarea foaie de date, veți obține un rezultat neașteptat. În coloana cumpărați, fiecare câmp este debifată:

ID produs

Data comenzii

Numele firmei

Tranzacție

Cumpărați

Vânzare

74

1/22/2006

Furnizor B

Achiziție

77

1/22/2006

Furnizor B

Achiziție

80

1/22/2006

Furnizor D

Achiziție

81

1/22/2006

Furnizor A

Achiziție

81

1/22/2006

Furnizor A

Achiziție

7

20/1/2006

Firmă D

Vânzare

10

51

20/1/2006

Firmă D

Vânzare

10

80

20/1/2006

Firmă D

Vânzare

10

34

15/1/2006

Firmă AA

Vânzare

100

80

15/1/2006

Firmă AA

Vânzare

30

Motivul pentru care se întâmplă acest lucru este, deoarece Access determină tipurile de date ale câmpurilor din prima interogare. În acest exemplu, Null nu este un număr.

Așadar, ce se întâmplă dacă încercați să inserați un șir gol pentru valoare necompletată de câmpuri? SQL pentru această încercare s-ar putea arăta astfel:

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;

Atunci când comutați la vizualizarea foaie de date, veți vedea că Access preia valorile cumpărați, dar îl transformă valorile în text. Vă puteți da seama acestea sunt valori text, deoarece acestea sunt aliniate la stânga în vizualizarea foaie de date. Șir gol în prima interogare nu este un număr care este de ce vedeți aceste rezultate. Veți observa că valorile vindem, de asemenea, se transformă în text, deoarece achiziție înregistrări conțin un șir gol.

ID produs

Data comenzii

Numele firmei

Tranzacție

Cumpărați

Vânzare

74

1/22/2006

Furnizor B

Achiziție

20

77

1/22/2006

Furnizor B

Achiziție

60

80

1/22/2006

Furnizor D

Achiziție

75

81

1/22/2006

Furnizor A

Achiziție

125

81

1/22/2006

Furnizor A

Achiziție

200

7

20/1/2006

Firmă D

Vânzare

10

51

20/1/2006

Firmă D

Vânzare

10

80

20/1/2006

Firmă D

Vânzare

10

34

15/1/2006

Firmă AA

Vânzare

100

80

15/1/2006

Firmă AA

Vânzare

30

Așa cum puteți rezolva acest puzzle?

O soluție este să Impuneți interogarea să se aștepte valoarea câmpului să fie un număr. Care poate fi realizat cu expresie:

IIf(False, 0, Null)

Condiția pentru a verifica, False, nu va fi adevărat, Deci expresia întotdeauna va returna valoarea Null, dar Access încă evaluează ambele opțiuni de ieșire și decide rezultatul să fie numerică sau o valoare Null.

Iată cum utilizăm această expresie în exemplul nostru de lucru:

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;

Rețineți că nu este necesar să modificați a doua interogare.

În cazul în care comutați la vizualizarea foaie de date, veți vedea acum un rezultat care dorim:

ID produs

Data comenzii

Numele firmei

Tranzacție

Cumpărați

Vânzare

74

1/22/2006

Furnizor B

Achiziție

20

77

1/22/2006

Furnizor B

Achiziție

60

80

1/22/2006

Furnizor D

Achiziție

75

81

1/22/2006

Furnizor A

Achiziție

125

81

1/22/2006

Furnizor A

Achiziție

200

7

20/1/2006

Firmă D

Vânzare

10

51

20/1/2006

Firmă D

Vânzare

10

80

20/1/2006

Firmă D

Vânzare

10

34

15/1/2006

Firmă AA

Vânzare

100

80

15/1/2006

Firmă AA

Vânzare

30

O metodă alternativă pentru a obține același rezultat este să adauge interogările din interogarea de Uniune cu o altă interogare:

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

Pentru fiecare câmp, Access returnează valori fixe de tipul de date pe care le definiți. Bineînțeles, nu doriți rezultatul această interogare pentru a se confunde cu rezultate, astfel încât secretul pentru a evita care este de a include o clauză WHERE la False:

WHERE False

Acesta este un pic secretul, deoarece acest lucru este întotdeauna false și apoi interogarea nu returnează nimic. Combinarea această declaraţie cu SQL existente și putem ajunge la o instrucțiune completată după cum urmează:

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;

Notă: Interogarea combinat aici în acest exemplu utilizează baza de date Northwind returnează înregistrările 100, în timp ce două interogări individuale returna 58 și 43 înregistrări pentru un total de 101 înregistrări. Motivul pentru acest diferenței este că două înregistrări nu sunt unice. Consultați secțiunea, lucrul cu înregistrările distincte din interogările de Uniune utilizând UNION ALL, pentru a afla cum să rezolvați acest scenariu, utilizând UNION ALL.

Este o cazul speciale pentru o interogare de Uniune pentru a combina un set de înregistrări cu o singură înregistrare care conține suma unul sau mai multe câmpuri.

Iată un exemplu în care puteți crea în baza de date Northwind eșantion pentru a ilustra cum se obține un total într-o interogare de Uniune.

  1. Creați o nouă interogare simplă pentru a vizualiza achiziție beri (ID produs = 34 în baza de date Northwind) utilizând următoarea sintaxă SQL:

    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. Comutarea la foaie de date Vizualizare și când ar trebui să consultați patru achiziții:

    Data primite

    Cantitate

    1/22/2006

    100

    1/22/2006

    60

    4/4/2006

    50

    4/5/2006

    300

  3. Pentru a obține totalul, creați o interogare simplă agregarea utilizând următoarele SQL:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Comutarea la foaie de date Vizualizare și ar trebui să vedeți doar o înregistrare:

    MaxOfDate primite

    SumOfQuantity

    4/5/2006

    510

  5. Combinarea aceste două interogări într-o interogare de Uniune pentru a adăuga înregistrarea cu cantitatea totală la înregistrările de achiziție:

    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. Comutarea la foaie de date Vizualizare și ar trebui să consultați patru achiziții cu suma fiecare urmată de o înregistrare care adună cantitatea:

    Data primite

    Cantitate

    1/22/2006

    60

    1/22/2006

    100

    4/4/2006

    50

    4/5/2006

    300

    4/5/2006

    510

Care se referă la elementele de bază ale adăugarea totaluri într-o interogare de Uniune. De asemenea, se recomandă să includeți valori fixe în ambele interogări, cum ar fi "Detaliat" și "Total" pentru a separa vizual înregistrarea totală din alte înregistrări. Puteți să examinați utilizând valori fixe în secțiunea combina trei sau mai multe tabele sau interogări într-o interogare de Uniune.

Interogările de Uniune în Access în mod implicit include numai înregistrările distincte. Dar ce se întâmplă dacă doriți să includeți toate înregistrările? Alt exemplu s-ar putea fi utile aici.

În secțiunea anterioară, am arătat cum să creați un total într-o interogare de Uniune. Modificarea această interogare de Uniune SQL pentru a include ID produs 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];

Comutarea la foaie de date Vizualizare și ar trebui să vedeți un rezultat oarecum înșelătoare:

Data primite

Cantitate

1/22/2006

100

1/22/2006

200

O înregistrare de curs nu returnează cantitatea de două ori în total.

Motivul pentru care veți vedea acest rezultat este, deoarece într-o zi aceeași cantitate de bomboane a fost vândute de două ori - așa cum sunt înregistrate în tabelul Detalii comenzi cumpărare. Iată un rezultat de interogare simplă de selectare care afișează ambele înregistrări din baza de date Northwind eșantion:

Achiziționați ID comandă

Product

Quantity

100

Northwind Traders ciocolata

100

92

Northwind Traders ciocolata

100

În interogarea de Uniune notate anterior, puteți vedea că câmpul ID comandă de cumpărare nu este inclus și că două câmpuri nu alcătuiesc două înregistrări distincte.

Dacă doriți să includeți toate înregistrările, utilizați UNION ALL în loc de Uniune în pe SQL. Acest lucru îndeosebi probabil va avea un impact asupra sortarea rezultatelor, astfel încât este posibil să doriți să includeți, de asemenea, o clauză ORDER BY pentru a determina o ordine de sortare. Iată clădirea SQL modificate dezactivarea exemplul anterior:

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

Comutarea la foaie de date Vizualizare și care ar trebui să vadă detaliile în plus față de un total ca ultima înregistrare:

Data primite

Total

Cantitate

1/22/2006

100

1/22/2006

100

1/22/2006

Total

200

O utilizare comune pentru o interogare de Uniune este de a servi ca sursă de înregistrări pentru un control casetă combo dintr-un formular. Puteți utiliza acea casetă combo pentru a selecta o valoare pentru a filtra înregistrările formular. De exemplu, filtrarea înregistrărilor angajat după localitate lor.

Pentru a vedea cum acest lucru poate funcționa, Iată un exemplu că puteți să creați în baza de date Northwind eșantion pentru a ilustra acest scenariu.

  1. Creați o interogare simplă de selectare Utilizați această sintaxă SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Comutarea la foaie de date Vizualizare și care ar trebui să vedeți următoarele rezultate:

    City

    Filtru

    Seattle

    Seattle

    Sinaia

    Sinaia

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Consultând acele rezultate posibil să nu vedeți o mulțime de valoare. Extindeți dacă interogarea și transformarea unei interogări de Uniune, utilizând următoarele SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Comutarea la foaie de date Vizualizare și care ar trebui să vedeți următoarele rezultate:

    City

    Filtru

    < toate >

    *

    Sinaia

    Sinaia

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access efectuează o Uniune de înregistrări nouă, anterior afișat, cu valori fixe câmp < tuturor > și "*".

    Pentru că această clauză union nu conține UNION ALL, Access returnează înregistrările doar distincte ceea ce înseamnă că fiecare oraș se returnează o singură dată cu valori fixe identice.

  5. Acum că aveți o interogare de Uniune completată afișează fiecare nume de localitate doar după ce, împreună cu o opțiune care în mod eficient selectează toate orașele, puteți utiliza această interogare ca sursă de înregistrări pentru o casetă combo dintr-un formular. Utilizați acest exemplu specifice ca un model, puteați crea un control casetă combo dintr-un formular, setați această interogare ca sursă de înregistrări, setați proprietatea lățimea coloanei din coloana de filtrare la 0 (zero) pentru a ascunde vizual și setați proprietatea coloană legată la 1 pentru a indica index din a doua coloană. În proprietatea de filtrare a formularului în sine, puteți adăuga apoi codul, cum ar fi următoarele pentru a activa un filtru de formular utilizând valoarea a ceea ce s-a selectat în control casetă combo:

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

    Utilizatorul a formularului poate apoi filtrarea înregistrărilor de formular la un nume de localitate specifice sau selectați < toate > pentru a lista toate înregistrările pentru toate orașele.

Începutul paginii

Extindeți-vă competențele Office
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă utilizatorilor Office Insider

Au fost utile aceste informații?

Vă mulțumim pentru feedback!

Vă mulțumim pentru feedback! Se pare că ar fi util să luați legătura cu unul dintre agenții noștri de asistență Office.

×