[Access]Query: Hulp nodig voor een group by van 2tabellen

Pagina: 1
Acties:

  • mistercash
  • Registratie: Juli 2004
  • Laatst online: 19-04 07:40
Wel,

Ik heb een database met 2 tabellen.
De eerste tabel zijn de leden bevat:
lidid,naam,geslacht,leeftijdcategorie

Dan heb ik een tabel tblpunten bevat:
puntid,lidid,divisie,score,#treffers

Nu komt het probleem:
Ik wil weten wie van elk geslacht,leeftijdcategorie en divisie de hoogste score heeft.
De hoogste score is degene met hoogste score en als 2 personen gelijke score hebben dan tellen het aantal treffers.
Nu wil ik niet weten wat de hoogste score is maar weten wie die persoon is die de hoogste score heeft binnen zijn afdeling.

vb: tabel leden:
1|ikke|m|junior
2|spik|m|junior
3|spi2|v|master
4|spi3|v|master
5|spi4|v|junior
6|spi5|v|junior

tabel punten:
1|1|compound|160|2
2|2|compound|180|2
3|3|recurve|160|2
4|4|recurve|160|10
5|5|compund|120|0
6|6|compund|130|0

Dan zou ik als resultaat dit moeten hebben:
rij1:compound|m|junior|spik|180|2
rij2:compound|v|junior|spi6|130|0
rij3:recurve|v|master|spi3|160|10

Het probleem is dat ik maar niet degene eruit krijg met de max score van ieder afdeling, alleen de max score van iedere afdeling.

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Kun je niet beter drie losse queries maken?

stp - PSN ID: stp_4


  • mistercash
  • Registratie: Juli 2004
  • Laatst online: 19-04 07:40
ja en hoe ga ik dit dan oplossen met 3 queries?

Heb al geprobeerd om dit zo te doen maar het probleem is dat je als eerste query de maxscores bepaalt per afdeling.
Dat je dan met query 2 de mensen zoekt die die score hebben dat er ook vb mensen bijzitten die in een andere afdeling dezelfde score hebben als een afdeling zodat je dan per afdeling soms 2 personen krijgt.
Dus dan moet je nog een query hebben die dan die andere eruit laat maar hoe je dat doet kan ik maar niet bedenken.
Ik zit nu al 2 weken op dit probleem bezig, ik hoop dat iemand mij hiermee kan helpen.

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Je kan toch een 3 queries maken:
1 x naam, geslacht met hoogste score
1 x naam, leeftijdcategorie met hoogste score
1 x naam, divisie met hoogste score

Als je dan perse wilt dat deze in 1 tabel moeten komen, dan kun je een een UNION doen op deze tabellen.

[ Voor 4% gewijzigd door stp_4 op 27-04-2005 13:55 ]

stp - PSN ID: stp_4


  • mistercash
  • Registratie: Juli 2004
  • Laatst online: 19-04 07:40
Nou ja dan zit je wel helemaal tegen het principe in bezig.

Namelijk omdat vb:
je hebt een dame die junior is en heeft score 10
je hebt een dame die master is en heeft score 20
je hebt een man die junior is en heeft score 15
je hebt een man die master is en heeft score 15

dan zou je volgens u dan de hoogste dames is 20
hoogste heren is 15
dan hoogste juniors is dan 15 dit klopt niet
ik zoek de hoogste score van:
dame junior
dame master
heer junior
heer master
en niet die van:
hoogste van geslacht
en dan die van categorie dan ga je beide dingen door elkaar halen.

Iets zegt mij dat je nog niet gehoord hebt van group by, anders zou je dit soort antwoord niet geven.

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Uhh...... dit stond in je startpost:
Ik wil weten wie van elk geslacht,leeftijdcategorie en divisie de hoogste score heeft. Vandaar dat ik met dit antwoord kwam..... ;) Ik dacht dus afzonderlijk..

[ Voor 64% gewijzigd door stp_4 op 27-04-2005 14:18 ]

stp - PSN ID: stp_4


  • mistercash
  • Registratie: Juli 2004
  • Laatst online: 19-04 07:40
neen sorry dan heb ik mijn vraag verkeerd gesteld.

Het is zoals ik hier boven uitlegde.

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Wat heb je tot nu dan al aan query?

stp - PSN ID: stp_4


  • mistercash
  • Registratie: Juli 2004
  • Laatst online: 19-04 07:40
ja niks concreet zou van nul willen beginnen

  • mistercash
  • Registratie: Juli 2004
  • Laatst online: 19-04 07:40
Zal helemaal opnieuw beginnen met uitleg:

Heb 2 tabellen.

Heb tot nu toe een query die de maxscrores geeft per divisie waar een opslitsing is per geslacht, per leeftijd en per <12m(ja/nee):
Deze geeft dit resultaten:
Afbeeldingslocatie: http://users.pandora.be/mrcash/queryresult.jpg
Nu heb ik op die resultaten iets aangekruisd.
Wel dit is als 2personen dezelfde score hebben binnen hun opsplitsing dan moet er gekeken worden wie de meeste in 'in 10' heeft.
Dus hier zou dus de rij met "TONNAER ANNE-MARIE" als rij moeten blijven en "FRANSEN RITA" als rij moeten verdwijen omdat zij minder 'in 10' heeft.

Hoe moet ik dit doen?

De query is best complex:
code:
1
2
3
4
SELECT t1.WedstrijdID, t1.Divisie, l1.[KLASSE NR GESLACHT], l1.[KLASSE NR LEEFTIJD],t1.[<12 m], t1.Uitslag AS MaxVanUitslag,t1.[In 10], l1.NAAM
FROM [ledenlijst HBL met-zonder licen] AS l1, tblPunten AS t1
WHERE (((l1.Id)=[t1].[LidID]) AND ((t1.Uitslag)>=(select max(t2.UItslag) from tblPunten t2,[ledenlijst HBL met-zonder licen] l2 WHERE t2.LidID=l2.ID AND l1.[KLASSE NR GESLACHT]=l2.[KLASSE NR GESLACHT] AND t1.Divisie=t2.Divisie AND l1.[KLASSE NR LEEFTIJD]=l2.[KLASSE NR LEEFTIJD]  AND t1.WedstrijdID=t2.WedstrijdID AND t1.[<12 m]=t2.[<12 m])))
ORDER BY t1.WedstrijdID, t1.Divisie, l1.[KLASSE NR GESLACHT], l1.[KLASSE NR LEEFTIJD], t1.Divisie;


Ik hoop dat er iemand met een goede kennis hiervan mij kan helpen

********EDIT:************

Ik denk dat ik het gevonden heb:
Heb namelijk nog iets toegevoegd:
code:
1
2
3
4
5
SELECT t1.WedstrijdID, t1.Divisie, l1.[KLASSE NR GESLACHT], l1.[KLASSE NR LEEFTIJD],t1.[<12 m], t1.Uitslag AS MaxVanUitslag,t1.[In 10], l1.NAAM
FROM [ledenlijst HBL met-zonder licen] AS l1, tblPunten AS t1
WHERE (((l1.Id)=[t1].[LidID]) AND ((t1.Uitslag)>=(select max(t2.UItslag) from tblPunten t2,[ledenlijst HBL met-zonder licen] l2 WHERE t2.LidID=l2.ID AND l1.[KLASSE NR GESLACHT]=l2.[KLASSE NR GESLACHT] AND t1.Divisie=t2.Divisie AND l1.[KLASSE NR LEEFTIJD]=l2.[KLASSE NR LEEFTIJD]  AND t1.WedstrijdID=t2.WedstrijdID AND t1.[<12 m]=t2.[<12 m]))
AND((t1.[In 10])>=(select max(t2.[In 10]) from tblPunten t2,[ledenlijst HBL met-zonder licen] l2 WHERE t2.LidID=l2.ID AND l1.[KLASSE NR GESLACHT]=l2.[KLASSE NR GESLACHT] AND t1.Divisie=t2.Divisie AND l1.[KLASSE NR LEEFTIJD]=l2.[KLASSE NR LEEFTIJD]  AND t1.WedstrijdID=t2.WedstrijdID AND t1.[<12 m]=t2.[<12 m])))
ORDER BY t1.WedstrijdID, t1.Divisie, l1.[KLASSE NR GESLACHT], l1.[KLASSE NR LEEFTIJD], t1.Divisie;
Dat ook t1.[In 10]>=(select max(t2.[In 10]....

Ok Best moeilijk als je het mij vraagt

[ Voor 32% gewijzigd door mistercash op 27-04-2005 17:21 ]

Pagina: 1