Szeretnél egy Access adatbázisban lekérdezni a legnagyobb értéket, és ehhez szeretnéd hozzákapcsolni egy másik táblában tárolt nevet? Jó helyen jársz! Ez a cikk részletesen bemutatja, hogyan teheted ezt meg lépésről lépésre, különböző módszerekkel és példákkal illusztrálva.
Miért fontos ez a lekérdezés?
Az ilyen típusú lekérdezések rendkívül hasznosak a relációs adatbázisok elemzése során. Képzeld el, hogy van egy táblád a dolgozók teljesítményéről (pl. eladások), és egy másik táblád a dolgozók adatairól (név, beosztás stb.). Szeretnéd megtudni, ki volt a legjobb eladó a hónapban. Ehhez a teljesítménytáblából ki kell választanod a maximum eladási értéket, és ezt össze kell kapcsolnod a dolgozók táblájával, hogy megkapd az illető nevét. Ez egy klasszikus példa arra, hogy miért hasznos a maximum érték lekérdezése névvel együtt másik táblából.
Az adatbázis felépítése
Először is nézzük meg, milyen táblákkal fogunk dolgozni. Tegyük fel, hogy két táblánk van:
- Eladások: Tartalmazza az eladási adatokat. Oszlopok:
EladasID
(Autonumber, Primary Key),DolgozoID
(Number, Foreign Key),EladasiOsszeg
(Currency),Datum
(Date/Time). - Dolgozok: Tartalmazza a dolgozók adatait. Oszlopok:
DolgozoID
(Autonumber, Primary Key),Nev
(Text),Beosztas
(Text).
Fontos, hogy a DolgozoID
mező a Eladások
táblában idegen kulcs, amely a Dolgozok
tábla DolgozoID
mezőjére mutat.
A lekérdezés megvalósítása
Több módszer is létezik a kívánt eredmény elérésére. Bemutatunk néhányat a leggyakoribbak közül:
1. Allekérdezés használata
Ez a módszer egy SQL lekérdezést használ a maximális eladási összeg meghatározására, majd ezt az értéket használja egy másik lekérdezésben a megfelelő dolgozó adatainak lekérdezésére.
SELECT Dolgozok.Nev, Eladások.EladasiOsszeg
FROM Dolgozok INNER JOIN Eladások ON Dolgozok.DolgozoID = Eladások.DolgozoID
WHERE Eladások.EladasiOsszeg = (SELECT Max(Eladások.EladasiOsszeg) FROM Eladások);
Magyarázat:
- A
SELECT
rész kiválasztja a dolgozó nevét (Dolgozok.Nev
) és az eladási összeget (Eladások.EladasiOsszeg
). - A
FROM
ésINNER JOIN
részek összekapcsolják a két táblát aDolgozoID
mező alapján. - A
WHERE
rész szűri az eredményeket, csak azokat a sorokat tartja meg, ahol az eladási összeg megegyezik a(SELECT Max(Eladások.EladasiOsszeg) FROM Eladások)
allekérdezés által visszaadott maximális eladási összeggel.
2. Csoportosítás és Max() függvény használata
Ez a módszer a GROUP BY
és MAX()
függvényeket használja az eladási összegek csoportosítására és a maximális érték meghatározására. Ezt követően csatlakozunk a Dolgozok
táblához.
SELECT Dolgozok.Nev, Eladások.EladasiOsszeg
FROM Dolgozok INNER JOIN (SELECT DolgozoID, Max(EladasiOsszeg) AS MaxEladasiOsszeg FROM Eladások GROUP BY DolgozoID) AS MaxEladasok ON Dolgozok.DolgozoID = MaxEladasok.DolgozoID
INNER JOIN Eladások ON MaxEladasok.DolgozoID = Eladások.DolgozoID AND MaxEladasok.MaxEladasiOsszeg = Eladások.EladasiOsszeg;
Magyarázat:
- A belső
SELECT
lekérdezés ((SELECT DolgozoID, Max(EladasiOsszeg) AS MaxEladasiOsszeg FROM Eladások GROUP BY DolgozoID) AS MaxEladasok
) meghatározza az egyes dolgozók maximális eladási összegét. - A külső
SELECT
lekérdezés összekapcsolja ezt az eredményt aDolgozok
táblával aDolgozoID
alapján, és azEladások
táblával, hogy megkapjuk a pontos eladási összeget aDolgozoID
és aMaxEladasiOsszeg
alapján.
3. DLookup függvény használata (VBA-ban)
Ha VBA kódot szeretnél használni, a DLookup
függvény egy másik megoldást kínál. Ezzel a függvénnyel közvetlenül lekérdezheted a nevet a Dolgozok
táblából a maximális eladási összeg alapján.
Public Function LegjobbElado() As String
Dim MaxEladas As Currency
Dim DolgozoID As Integer
MaxEladas = DMax("EladasiOsszeg", "Eladások")
DolgozoID = DLookup("DolgozoID", "Eladások", "EladasiOsszeg = " & MaxEladas)
LegjobbElado = DLookup("Nev", "Dolgozok", "DolgozoID = " & DolgozoID)
Debug.Print "A legjobb eladó: " & LegjobbElado & " (" & MaxEladas & ")"
End Function
Magyarázat:
DMax("EladasiOsszeg", "Eladások")
: Megkeresi a maximális eladási összeget azEladások
táblában.DLookup("DolgozoID", "Eladások", "EladasiOsszeg = " & MaxEladas)
: Megkeresi aDolgozoID
-t azEladások
táblában, ahol azEladasiOsszeg
megegyezik a maximális eladási összeggel.DLookup("Nev", "Dolgozok", "DolgozoID = " & DolgozoID)
: Megkeresi a dolgozó nevét aDolgozok
táblában a megtaláltDolgozoID
alapján.
Melyik módszert válasszam?
A választás attól függ, hogy milyen környezetben szeretnéd használni a lekérdezést.
- Az SQL lekérdezések (1. és 2. módszer) ideálisak a közvetlen adatbázis-lekérdezésekhez és az Access lekérdezéstervezőjében való használatra.
- A VBA kód (3. módszer) akkor hasznos, ha a lekérdezést egy űrlap vagy jelentés mögött szeretnéd futtatni, vagy ha összetettebb logika szükséges.
További tippek és trükkök
- Ha több dolgozónak is van azonos maximális eladási összege, a lekérdezések mindegyiket visszaadják.
- Győződj meg arról, hogy az adatbázis megfelelően van normalizálva, és az idegen kulcsok helyesen vannak beállítva.
- Teszteld a lekérdezéseket különböző adatokkal, hogy biztosan helyesen működjenek.
Reméljük, ez a cikk segített megérteni, hogyan lehet maximum értéket lekérdezni az Access-ben, és azt egy másik táblából származó névvel összekapcsolni. Kísérletezz a különböző módszerekkel, és válaszd ki azt, amelyik a leginkább megfelel az igényeidnek!