Több lekérdezés eredményének együttes megjelenítése egyesítő lekérdezéssel

Hatókör
Microsoft 365-höz készült Access Access 2024 Access 2021 Access 2019 Access 2016

Időnként előfordulhat, hogy egyetlen eredményben szeretné egyesíteni egy tábla vagy lekérdezés rekordjait egy vagy több másik tábla rekordjaival együtt. Ezt teszik az egyesítő lekérdezések az Accessben.

Az egyesítő lekérdezések megértéséhez először meg kell ismerkednie az alapszintű választó lekérdezés összeállításával az Accessben. A választó lekérdezések összeállításáról az Egyszerű választó lekérdezés létrehozása című cikkben olvashat bővebben.

Egy működő egyesítő lekérdezés példájának tanulmányozása

Ha még soha nem hozott létre egyesítő lekérdezést, érdemes lehet először tanulmányozni egy működő példát a Northwind Access-sablonban. A Northwind mintasablonra az Access Első lépések lapján kereshet rá azÚjfájl> elemre kattintva. Közvetlenül a Northwind mintasablonból is letölthet egy példányt.

Miután az Access megnyitotta a Northwind adatbázist, zárja be az először megjelenő bejelentkezési párbeszédpanelt, majd bontsa ki a navigációs ablakot. Válassza a navigációs ablak tetejét, majd az Objektumtípus lehetőséget választva típus szerint rendezze az összes adatbázis-objektumot. Ezután a Lekérdezések csoportot kibontva láthatja a Terméktranzakciók lekérdezést.

Az egyesítő lekérdezések egyszerűen megkülönböztethetők a többi lekérdezésobjektumtól, mivel két egybefonódó körre hasonlító speciális ikon jelzi őket, amely két halmazból egyesített halmazt képvisel:

Képernyőkép egy egyesítő lekérdezés ikonjáról az Accessben. A normál választó és módosító lekérdezésekkel ellentétben az egyesítő lekérdezésekben a táblák nem kapcsolódnak. Ez azt jelenti, hogy az Access grafikus lekérdezéstervezőjével nem hozhat létre vagy szerkeszthet egyesítő lekérdezéseket. Ha a navigációs ablakból nyit meg egy egyesítő lekérdezést, az Access megnyitja azt, és az eredményt Adatlap nézetben jeleníti meg. Figyelje meg, hogy a Kezdőlap lap Nézetek csoportjában a Tervező nézet nem érhető el az egyesítő lekérdezések használatakor. Csak az Adatlap nézet és az SQL nézet között válthat.

Az egyesítő lekérdezésminta további tanulmányozásához kattintson a SQLKezdőlap>nézetek>SQL nézetre az azt meghatározó szintaxis megtekintéséhez. Ebben az ábrában plusz térközöket vettünk fel SQL , hogy jól láthassa az egyesítő lekérdezést alkotó különböző részeket.

Nézzük meg SQL részletesen a Northwind adatbázis egyesítő lekérdezésének szintaxisát:


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;

Az SQL-utasítás első és harmadik része alapvetően két választó lekérdezés. Ezek a lekérdezések két különböző rekordhalmazt kérdeznek le; egyiket a Termékrendelések táblából és a másikat a Termékbeszerzések táblából.

Az utasítás második része SQL a UNION kulcsszó, amely arra utasítja az Accesst, hogy egyesítse ezt a két rekordkészletet.

Az utasítás utolsó része SQL egy ORDER BY utasítás segítségével határozza meg az egyesített rekordok sorrendjét. Ebben a példában az Access az összes rekordot a Rendelve mező szerint rendezi, csökkenő sorrendben.

Megjegyzés

Az egyesítő lekérdezések mindig írásvédettek az Accessben; Adatlap nézetben semmilyen értéket sem módosíthat.

Egyesítő lekérdezés létrehozása választó lekérdezések létrehozásával és egyesítésével

Még ha létre SQL is hozhat egy egyesítő lekérdezést a szintaxis közvetlenül az SQL nézetben történő megírásával, választó lekérdezésekkel egyszerűbb azt részenként összeállítani. Ezután a vágólapra másolhatja és beillesztheti az SQL-részeket egy kombinált egyesítő lekérdezésbe.

Ha a lépéseket kihagyva inkább egy példát szeretne megnézni, tanulmányozza a következő, az Egyesítő lekérdezés összeállításának példája című szakaszt.

  1. Kattintson a Létrehozás lap Lekérdezések csoportjának Lekérdezéstervező gombjára.
  2. Kattintson duplán arra a táblára, amely a felvenni kívánt mezőket tartalmazza. Ezzel felveszi a táblát a lekérdezéstervező ablakába.
  3. A lekérdezéstervező ablakban kattintson duplán az egyes felvenni kívánt mezőkre. A mezők kiválasztása során ügyeljen arra, hogy ugyanannyi számú mezőt, ugyanolyan sorrendben adjon hozzá a választó lekérdezésekhez. Különösen ügyeljen a mezők adattípusára, és győződjön meg arról, hogy azok kompatibilisek az egyesítéshez használt többi lekérdezéssel. Ha például az első választó lekérdezésben öt mező van, és ezek közül az első dátum/idő típusú adatokat tartalmaz, akkor győződjön meg arról, hogy az egyesítendő többi választó lekérdezésben is ennyi mező van, és az első mező adatai mindegyikben dátum/idő típusúak.
  4. Tetszés szerint feltételeket adhat meg a mezőkhöz, ha beírja a megfelelő kifejezéseket a mezőrács Feltétel sorába.
  5. Miután végzett a mezők és a mezőfeltételek megadásával, futtassa a választó lekérdezést, és tekintse át az eredményt. A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.
  6. Váltson át Tervező nézetre.
  7. Mentse és hagyja nyitva a választó lekérdezést.
  8. Ismételje meg a fenti lépést a többi egyesíteni kívánt választó lekérdezésnél.

Most, hogy létrehozta a választó lekérdezéseket, ideje egyesíteni őket. Ebben a lépésben az utasítások vágólapra másolásával és beillesztésével SQL létrehozza az egyesítő lekérdezést.

  1. Kattintson a Létrehozás lap Lekérdezések csoportjának Lekérdezéstervező gombjára.
  2. A Tervezés lap Lekérdezés csoportjában kattintson az Egyesítő gombra. Az Access elrejti a lekérdezéstervező ablakot, és megjeleníti az SQL nézet objektumlapot. Ezen a ponton a lap üres.
  3. Kattintson az egyesítő lekérdezésben egyesíteni kívánt első választó lekérdezés fülére.
  4. A Kezdőlap lapon kattintson azSQL-nézetmegtekintése elemre>.
  5. Másolja a vágólapra a SQL választó lekérdezés utasítását. Kattintson annak az egyesítő lekérdezésnek a fülére, amelyet korábban kezdett el létrehozni.
  6. Illessze be a SQL választó lekérdezés utasítását az egyesítő lekérdezés SQL nézet objektumlapjára.
  7. Törölje a választó lekérdezés SQL végéről a pontosvesszőt (;).
  8. Az Enter billentyűt lenyomva vigye egy sorral lejjebb a kurzort, majd írjon UNION az új sorba.
  9. Kattintson az egyesíteni kívánt következő választó lekérdezés fülére.
  10. Ismételje meg az 5–10. lépést, amíg vágólapra nem másolta és be nem illesztette a választó lekérdezések összes SQL utasítását az egyesítő lekérdezés SQL nézet ablakában. Ne törölje a pontosvesszőt, és ne írjon semmit az SQL utolsó választó lekérdezés utasításának végére.
  11. A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.

Az egyesítő lekérdezés eredményei Adatlap nézetben jelennek meg.

Egyesítő lekérdezés összeállításának példája

Itt láthat egy példát, amelyet újból létrehozhat a Northwind mintaadatbázisban. Ez az egyesítő lekérdezés összegyűjti a személyek neveit a Vevők táblából, és egyesíti őket a Szállítók táblában található személyek nevével. Ha végig szeretné követni a műveletet, végezze el ezeket a lépéseket a Northwind mintaadatbázis saját példányában.

Az alábbi lépéseket kell megtenni a példa összeállításához:

  1. Hozzon létre két, Lekérdezés1 és Lekérdezés 2 nevű választó lekérdezést, amelynek az adatforrása a Vevők és a Szállítók tábla. Megjelenítendő értékként használja a vezetéknevet és az utónevet.

  2. Hozzon létre egy Lekérdezés3 nevű új lekérdezést kezdetben adatforrás nélkül, majd a Tervezés lapon az Egyesítő parancsra kattintva alakítsa át egyesítő lekérdezéssé.

  3. Másolja a vágólapra a Lekérdezés1 és a Lekérdezés2 nevű lekérdezésből az SQL-utasításokat, és illessze be a Lekérdezés3 nevű lekérdezésbe. Távolítsa el a plusz pontosvesszőt, és vegye fel a kulcsszót UNION . Ezután ellenőrizheti az eredményeket Adatlap nézetben.

  4. Vegyen fel egy rendezési záradékot az egyik lekérdezésbe, majd illessze be az ORDER BY utasítást az egyesítő lekérdezésbe SQL nézetben. Figyelje meg, hogy amikor a Lekérdezés3 egyesítő lekérdezésben rendezést fűz hozzá, először a pontosvesszőket távolítja el a mezőnevekből, majd a tábla nevét.

  5. Az egyesítő lekérdezés példájának neveit egyesítő és rendező végleges SQL a következő:

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

Ha jól ismeri a szintaxisok írásátSQL, közvetlenül SQL nézetben is írhat saját SQL utasítást az egyesítő lekérdezéshez. Hasznosnak találhatja azonban, ha követi az SQL egyéb lekérdezési objektumokból való másolásának és beillesztésének módját. Az egyes lekérdezések sokkal összetettebbek lehetnek, mint az itt használt egyszerű választó lekérdezés. Érdemes minden lekérdezést gondosan létrehozni és tesztelni, mielőtt egyesítő lekérdezésbe kombinálná őket. Ha nem fut az egyesítő lekérdezés, egyesével módosíthatja a lekérdezéseket, amíg sikeres nem lesz, majd a javított szintaxissal újra összeállíthatja az egyesítő lekérdezést.

A jelen cikk hátralévő szakaszait tanulmányozva további tippeket és trükköket tudhat meg az egyesítő lekérdezések használatáról.

Három vagy több tábla vagy lekérdezés egyesítése egyesítő lekérdezésben

Az előző szakaszban szereplő példában, amely a Northwind adatbázist használja, csak két tábla adatait egyesítettük. Az egyesítő lekérdezésekben azonban három vagy több táblát is könnyedén egyesíthet. Az előző példára építve például érdemes lehet szerepeltetni az alkalmazottak nevét a lekérdezés eredményében. A feladat elvégzéséhez vegyen fel egy harmadik lekérdezést, és egyesítse az előző SQL-utasítást egy további UNION kulcsszóval, például ezzel:


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

Amikor Adatlap nézetben tekinti meg az eredményt, az összes alkalmazott a mintacég nevével együtt fog szerepelni a listában, ami valószínűleg nem túl praktikus. Ha azt szeretné, hogy a mező jelezze, hogy egy személy belső alkalmazott, szállító vagy vevő, a cég neve helyett rögzített értéket is szerepeltethet. Így néz ki 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];

A lekérdezés eredménye így jelenik meg Adatlap nézetben. Az Access ezt az öt mintarekordot jeleníti meg:

Foglalkoztatás Utónév Vezetéknév
Belső Kőszegi Emília
Belső Molnár Ilona
Szállító Harmath Zoltán
Vevő Papp Gábor
Vevő Budai Péter

A lekérdezések mennyisége tovább csökkenthető, mivel az Access a kimeneti mezők nevét csak az egyesítő lekérdezések első lekérdezéséből olvassa be. Itt a második és a harmadik lekérdezési szakasz kimenete törlődik:


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

Szűrés egyesítő lekérdezésekben

Az Access egyesítő lekérdezéseiben csak egyszer engedélyezett a rendezés, de minden lekérdezést szűrhet külön-külön. Az előző szakasz egyesítő lekérdezése alapján itt látható egy példa, amely egy záradékot hozzáadva WHERE szűri az egyes lekérdezéseket.


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

Adatlap nézetre váltva ehhez hasonló eredmények jelenjenek meg:

Foglalkoztatás Utónév Vezetéknév
Szállító Balázs Erzsébet
Belső Kőszegi Emília
Vevő Balogh László
Belső Takács Anna
Szállító Biber Attila
Vevő Horváth Sándor
Szállító Lukács Tibor
Szállító Pozsony Balázs
Belső Kiss István
Szállító Dobándi Barbara
Belső Varga György

SQL-adattípusok

Ha az egyesítendő lekérdezések nagyon eltérnek, olyan helyzet fordulhat elő, ahol egy kimeneti mezőnek különböző típusú adatokat kell egyesítenie. Ebben az esetben az egyesítő lekérdezés többnyire szöveges adattípusként fogja visszaadni az eredményt, mivel ez az adattípus szöveget és számokat is tartalmazhat.

Ennek megértéséhez használjuk a Terméktranzakciók egyesítő lekérdezést a Northwind mintaadatbázisban. Nyissa meg a mintaadatbázist, majd a Terméktranzakciók lekérdezést Adatlap nézetben. Az utolsó tíz rekordnak ehhez hasonlónak kell lennie:

Termékszám Rendelve Cég neve Tranzakció Mennyiség
77 2006. 01. 22. B szállító Beszerzés 60
80 2006. 01. 22. D szállító Beszerzés 75
81 2006. 01. 22. A szállító Beszerzés 125
81 2006. 01. 22. A szállító Beszerzés 200
7 2006. 01. 20. D vállalat Értékesítés 10
51 2006. 01. 20. D vállalat Értékesítés 10
80 2006. 01. 20. D vállalat Értékesítés 10
34 2006. 01. 15. AA vállalat Értékesítés 100
80 2006. 01. 15. AA vállalat Értékesítés 30

Tegyük fel, hogy a Mennyiség mezőt két mezőre szeretné felosztani: Vásárlás és Eladás. Tegyük fel, hogy nulla értéket szeretne rögzíteni az értéket nem tartalmazó mezőhöz. Ez az egyesítő lekérdezés így SQL néz ki:

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;

Adatlap nézetre váltva az utolsó tíz rekord most az alábbi módon jelenik meg:

Termékszám Rendelve Cég neve Tranzakció Vásárlás Eladás
74 2006. 01. 22. B szállító Beszerzés 20 0
77 2006. 01. 22. B szállító Beszerzés 60 0
80 2006. 01. 22. D szállító Beszerzés 75 0
81 2006. 01. 22. A szállító Beszerzés 125 0
81 2006. 01. 22. A szállító Beszerzés 200 0
7 2006. 01. 20. D vállalat Értékesítés 0 10
51 2006. 01. 20. D vállalat Értékesítés 0 10
80 2006. 01. 20. D vállalat Értékesítés 0 10
34 2006. 01. 15. AA vállalat Értékesítés 0 100
80 2006. 01. 15. AA vállalat Értékesítés 0 30

Ezt a példát folytatva, mi a teendő, ha a nulla értékű mezőket üresen szeretné hagyni? A kulcsszó felvételével Null módosíthatja aztSQL, hogy nulla helyett semmi se jelenjen meg:

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;

Ahogyan azonban az Adatlap nézetre váltáskor megfigyelhette, nem várt eredményt kap. A Vásárlás oszlopban minden mező törlődik:

Termékszám Rendelve Cég neve Tranzakció Vásárlás Eladás
74 2006. 01. 22. B szállító Beszerzés
77 2006. 01. 22. B szállító Beszerzés
80 2006. 01. 22. D szállító Beszerzés
81 2006. 01. 22. A szállító Beszerzés
81 2006. 01. 22. A szállító Beszerzés
7 2006. 01. 20. D vállalat Értékesítés 10
51 2006. 01. 20. D vállalat Értékesítés 10
80 2006. 01. 20. D vállalat Értékesítés 10
34 2006. 01. 15. AA vállalat Értékesítés 100
80 2006. 01. 15. AA vállalat Értékesítés 30

Ez azért fordul elő, mert az Access a mezők adattípusát az első lekérdezésből határozza meg. Ebben az esetben a Null nem szám.

Mi történik tehát, ha megpróbál beszúrni egy üres karakterláncot a mezők üres értékéhez? A SQL kísérlet a következőképpen nézhet ki:

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;

Adatlap nézetre váltva láthatja, hogy az Access lekéri a Vásárlás értékeit, de az értékeket szövegre konvertálta. Láthatja, hogy ezek szöveges értékek, mivel az Adatlap nézetben balról jobbra igazítottak. Az első lekérdezésben az üres karakterlánc nem szám, és ez az oka ennek az eredménynek. Azt is megfigyelheti, hogy az Eladás értékeit szintén szövegre konvertálja a program, mivel a beszerzési rekordok üres karakterláncot tartalmaznak.

Termékszám Rendelve Cég neve Tranzakció Vásárlás Eladás
74 2006. 01. 22. B szállító Beszerzés 20
77 2006. 01. 22. B szállító Beszerzés 60
80 2006. 01. 22. D szállító Beszerzés 75
81 2006. 01. 22. A szállító Beszerzés 125
81 2006. 01. 22. A szállító Beszerzés 200
7 2006. 01. 20. D vállalat Értékesítés 10
51 2006. 01. 20. D vállalat Értékesítés 10
80 2006. 01. 20. D vállalat Értékesítés 10
34 2006. 01. 15. AA vállalat Értékesítés 100
80 2006. 01. 15. AA vállalat Értékesítés 30

Hogyan oldható meg ez a rejtvény?

Az egyik megoldás a lekérdezés utasítása, hogy a mező értékeként számot várjon. Ezt a következő kifejezéssel megteheti:


IIf(False, 0, Null)

Az ellenőrizendő feltétel, , Falsesoha, True, ezért a kifejezés mindig a Null. Az Access azonban továbbra is értékeli mindkét kimeneti beállítást, és numerikusként vagy Null.

Ezt a kifejezést az alábbiak szerint használhatjuk a példánkban:


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;

A második lekérdezést nem kell módosítania.

Adatlap nézetre váltva most már láthatja a kívánt eredményt.

Termékszám Rendelve Cég neve Tranzakció Vásárlás Eladás
74 2006. 01. 22. B szállító Beszerzés 20
77 2006. 01. 22. B szállító Beszerzés 60
80 2006. 01. 22. D szállító Beszerzés 75
81 2006. 01. 22. A szállító Beszerzés 125
81 2006. 01. 22. A szállító Beszerzés 200
7 2006. 01. 20. D vállalat Értékesítés 10
51 2006. 01. 20. D vállalat Értékesítés 10
80 2006. 01. 20. D vállalat Értékesítés 10
34 2006. 01. 15. AA vállalat Értékesítés 100
80 2006. 01. 15. AA vállalat Értékesítés 30

Ugyanazon eredmény elérésének másik módja a lekérdezések beillesztése az egyesítő lekérdezésbe egy másik lekérdezéssel:

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

Az Access minden mező esetében a definiált adattípusnak megfelelő rögzített értékeket adja vissza. Természetesen nem szeretné, ha a lekérdezés kimenete ütközne az eredményekkel. Ezt úgy kerülheti el, ha egy WHERE záradékot alkalmaz a False feltételhez:

WHERE False

Ez egy kis trükk. Mivel a feltétel mindig hamis, a lekérdezés nem ad vissza semmit. Ennek az utasításnak a meglévő SQL-utasítással való egyesítése a következő kész utasítást eredményezi:

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;

Megjegyzés

Ebben a példában a Northwind adatbázis kombinált lekérdezése 100 rekordot ad vissza, míg a két egyéni lekérdezés 58 és 43 rekordot az összesen 101 rekordból. A különbség azért van, mert két rekord nem egyedi. Ha meg szeretné tudni, hogy miként oldhatja meg ezt a helyzetet a UNION ALLkövetkezővel: Külön rekordok használata egyesítő lekérdezésekben a UNION ALL segítségével.

Összegek hozzáadása egyesítő lekérdezésben

Az egyesítő lekérdezések különleges szerepe, hogy egy rekordkészletet egyesítenek egyetlen rekorddal, amely egy vagy több mező összegét tartalmazza.

Itt láthat egy másik példát, amelyet a Northwind mintaadatbázisban hozhat létre az összegek egyesítő lekérdezésekben való létrehozásának szemléltetésére.

  1. Hozzon létre egy új egyszerű lekérdezést a sör (Termékszám=34 a Northwind adatbázisban) beszerzésének megtekintése céljából a következő SQL szintaxis használatával:

    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. Adatlap nézetre váltva négy beszerzést kell látnia:

    Átvételi dátum Mennyiség
    2006. 01. 22. 100
    2006. 01. 22. 60
    2006. 04. 04. 50
    2006. 04. 05. 300
  3. Az összeg kiszámításához hozzon létre egy egyszerű összesítő lekérdezést a következő SQL használatával:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
  4. Adatlap nézetre váltva csak egy rekordot kell látnia:

    Max átvételi dátum Összmennyiség
    2006. 04. 05. 510
  5. Ezt a két lekérdezést egyetlen egyesítő lekérdezésbe kombinálva fűzze a teljes mennyiséget tartalmazó rekordot a beszerzési rekordokhoz:

    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. Adatlap nézetre váltva négy beszerzést kell látnia, amelyek mindegyikét a mennyiséget összegző rekord követ:

    Átvételi dátum Mennyiség
    2006. 01. 22. 60
    2006. 01. 22. 100
    2006. 04. 04. 50
    2006. 04. 05. 300
    2006. 04. 05. 510

Ez az összegek alapszintű felvétele az egyesítő lekérdezésekbe. Érdemes mindkét lekérdezésben szerepeltetni rögzített értékeket (például Részletek és Összesen), ha vizuálisan el szeretné különíteni az összesített rekordot a többi rekordtól. A rögzített értékek használatáról a Három vagy több tábla vagy lekérdezés egyesítése egyesítő lekérdezésben című szakaszban olvashat.

Külön rekordok használata egyesítő lekérdezésekben a UNION ALL segítségével

Az Accessben az egyesítő lekérdezések alapértelmezés szerint csak külön rekordokat tartalmaznak. Mi a teendő azonban akkor, ha az összes rekordot szeretné szerepeltetni? Hasznos lehet egy másik példán szemléltetni ezt.

Az előző szakaszban bemutattuk az összeg létrehozását egyesítő lekérdezésben. Módosítsa az egyesítő lekérdezést SQL úgy, hogy tartalmazza a Product ID = 48következőket:


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

Adatlap nézetre váltva kissé félrevezető eredményt láthat:

Átvételi dátum Mennyiség
2006. 01. 22. 100
2006. 01. 22. 200

Természetesen egy rekord nem eredményezi a teljes mennyiség kétszeresét.

Ezt az eredményt az jelzi, hogy egy nap kétszer adtak el azonos mennyiségű csokoládét a Megrendelés részletei táblában rögzítettek szerint. Alább látható egy egyszerű választó lekérdezés eredménye, amelyben a Northwind mintaadatbázis mindkét rekordja látható:

Megrendeléskód Termék Mennyiség
100 Northwind Traders csokoládé 100
92 Northwind Traders csokoládé 100

A korábban említett egyesítő lekérdezésben láthatja, hogy a Megrendeléskód mező hiányzik, és hogy a két mező nem alkot két külön rekordot.

Ha az összes rekordot fel szeretné venni, a UNION ALLUNIONSQL. Ez valószínűleg hatással lesz az eredmények rendezésére, ezért érdemes lehet felvenni egy ORDER BY záradékot a rendezési sorrend meghatározására. Az előző példa alapján a következő módosult SQL állapot:


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

Adatlap nézetre váltva láthatja az összes részletet, utolsó rekordként pedig az összeget:

Átvételi dátum Összeg Mennyiség
2006. 01. 22. 100
2006. 01. 22. 100
2006. 01. 22. Összeg 200

Rekordok szűrése egyesítő lekérdezéssel egy űrlapon kombinált lista vezérlőelemen keresztül

Az egyesítő lekérdezések általában rekordforrásként szolgálnak az űrlapokon szereplő kombinált lista vezérlőelemek számára. Ezt a kombinált listát használva kijelölhet egy értéket az űrlap rekordjainak szűréséhez. Ilyen például az alkalmazotti rekordok szűrése a település szerint.

A működés tanulmányozása végett itt láthat egy másik példát, amelyet a Northwind mintaadatbázisban hozhat létre az eset szemléltetésére.

  1. Hozzon létre egy egyszerű választó lekérdezést a következő SQL szintaxis használatával:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
    
  2. Adatlap nézetre váltva a következő eredményt kell látnia:

    Város Szűrő
    Vác Vác
    Pilisborosjenő Pilisborosjenő
    Ráckeve Ráckeve
    Kiskunfélegyháza Kiskunfélegyháza
    Vác Vác
    Ráckeve Ráckeve
    Vác Vác
    Ráckeve Ráckeve
    Vác Vác
  3. Ezt az eredményt megnézve előfordulhat, hogy nem lát sok értéket. Bontsa ki azonban a lekérdezést, és alakítsa át egyesítő lekérdezéssé a következő SQLmódon:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
    
  4. Adatlap nézetre váltva a következő eredményt kell látnia:

    Város Szűrő
    <Mind> *
    Pilisborosjenő Pilisborosjenő
    Kiskunfélegyháza Kiskunfélegyháza
    Ráckeve Ráckeve
    Vác Vác

    Az Access egyesíti a korábban látható kilenc rekordot, rögzített Mind> és "*" mezőértékkel<. Mivel ez az egyesítő záradék nem tartalmazza az UNION ALLegyesítő záradékot, az Access csak külön rekordokat ad vissza. Ez azt jelenti, hogy minden város csak egyszer jelenik meg, rögzített azonos értékekkel.

  5. Most, hogy már rendelkezik egy kész egyesítő lekérdezéssel, amely minden városnevet csak egyszer jelenít meg, és lehetővé teszi az összes város hatékony kijelölését, felhasználhatja azt egy űrlap kombinált listájának rekordforrásaként. Ezt az adott példát modellként használva létrehozhat egy kombinált lista vezérlőelemet egy űrlapon, beállíthatja ezt a lekérdezést a rekordforrásaként, a Szűrő oszlop Oszlopszélesség tulajdonságát 0 (nulla) értékre állíthatja az elrejtéséhez, majd a Kötött oszlop tulajdonságot 1 értékre állítva megjelölheti a második oszlop indexét. Filter Ezután az űrlap tulajdonságához az alábbihoz hasonló kóddal aktiválhat egy űrlapszűrőt a kombinált lista vezérlőelemben kiválasztott értékkel:

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

    Az űrlap használója ezután szűrheti az űrlaprekordokat egy adott városnévre, vagy az összes város összes rekordjának felsorolásához kiválaszthatja <az Összes> elemet.

Vissza a lap tetejére