lastige query in access database

Status
Niet open voor verdere reacties.

KJvHeusden

Nieuwe gebruiker
Lid geworden
29 mei 2010
Berichten
2
Hallo allemaal,

Ik heb een database gemaakt waarmee de resultaten van de sportdag van onze school verwerkt kunnen worden.
De database bestaat uit twee tabellen:
een tabel leerlingen: leerlingnr, voornaam, tussenvoegsel, achternaam, klas, geboortedatum, jongen/meisje
een tabel resultaten: leerlingnr, onderdeel, resultaat

Nu wil ik met een query een overzicht maken met de beste resultaten per onderdeel voor de jongens en de meisjes.
De uitvoer van de query moet dus de naam van de leerling geven, het onderdeel en het behaalde resultaat.

Is dit mogelijk?

O ja, om het nog wat moeilijker te maken: bij de meeste onderdelen is het beste resultaat Max(resultaat), behalve bij het onderdeel sprint, daar is het beste resultaat Min(resultaat).

Alvast bedankt voor de hulp.

Kees-Jan van Heusden
 
Je kunt eerst met twee queries de beste resultaten per onderdeel berekenen. Twee queries mert de optie Totalen, omdat je één keer MAX gebruikt, en één keer MIN. Je maakt hiervoor een query waarbij je het Onderdeel selecteert en Groepeert, Geslacht op Group By, en Resultaat (Min of Max). Ook heb je uiteraard de persoon nodig die het resultaat heeft behaald; als er meer personen zijn die een eerste of laatste plaats hebben gehaald, zul je eigenlijk met een Ranking de deelnemers een resultaatwaarde moeten geven; anders kun je voor het leerlingnummer de functie Eerste of zo gebruiken. Niet Group By, want dan krijg je alle resultaten.
De twee queries laten nu, als het goed is, één persoon per geslacht per onderdeel zien. Om alle onderdelen in één query te krijgen, voeg je ze samen met een Union query. Hiermee worden de resultaten met Min en Max waarden dus weer in één tabel gezet.
Als laatste stap kun je de Union query als basis gebruiken voor (bijvoorbeeld) een kruistabel query, waarbij je per onderdeel een kolom hebt met in twee rijen meisjes en jongens gesplitst, of andersom. In het veld Waarde heb je het veld Leerlingnummer nodig, dat je in een volgende query kunt vervangen door de naam van de leerling.
 
Dank je wel voor het antwoord.
Voor mij als beginnend gebruiker van access staan hier de nodige nieuwe mogelijkheden in (functie, union query).
Ik ga er komend weekend mee aan de slag en laat je dan weten of het me gelukt is.

Groetjes,
Kees-Jan
 
Als je een query maakt, start je in beginsel met een Selectiequery. Je kunt deze query met de knop Totalen uitbreiden, zodat je berekeningen kunt maken op basis van bepaalde velden waarop je dan Groepeert. Als je op de knop <Totalen> klikt, zal Access de velden standaard de functie <Group By> geven. Er wordt dus nog niks berekend op basis van de gemaakte groepen. Dat doe je door de functie <Group by> te vervangen door een andere functie uit de keuzelijst, zoals Min of Max.
Omdat je twee verschillende functies nodig hebt (MIN en MAX) zou ik twee queries maken. Een voor elke functie. Deze queries kun je dan vervolgens samenvoegen tot één met een Union query. Die ziet er ongeveer als volgt uit:

SELECT * FROM Query1
UNION ALL
SELECT * FROM Query2

Een Union query moet je altijd zelf intypen; die kan de Wizard niet maken. Maar zoals je ziet, is de constructie niet heel ingewikkeld.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan