frequentie distriburie en join

Status
Niet open voor verdere reacties.

brtusavius

Nieuwe gebruiker
Lid geworden
21 jan 2010
Berichten
1
Ik ben bezig met een frequentie distributie op een grote hoeveelheid tijden.
de distributie werkt op zich aardig, alleen ik krijg het maar niet voor elkaar om iedere tijdscategorie weer te geven; als er geen tijden vallen binnen een bepaalde categorie, wordt de categorie ook niet weergegeven in de query.

Ik dacht hiervoor een hulptabel te gebruiken via een join, maar dit werkt gewoonweg niet... wat doe ik fout?

[sql]SELECT groeptabel.tijdsvlak, Count([2009].Id) AS AantalVanId, [2009].Datum, hulptijden.hulpTijdsvlakken
FROM 2009, hulptijden LEFT JOIN groeptabel ON hulptijden.hulpTijdsvlakken = groeptabel.tijdsvlak
WHERE ((([2009].RIT_TIJD_2) Between [start] And [einde]))
GROUP BY groeptabel.tijdsvlak, [2009].Datum, groeptabel.Id, hulptijden.hulpTijdsvlakken
HAVING ((([2009].Datum)=#1/8/2009#))
ORDER BY groeptabel.tijdsvlak;[/sql]
 
Laatst bewerkt door een moderator:
Een hulptabel is op zich prima. De manier waarop je die gebruikt is misschien niet goed. Ik heb een voorbeeldje, dat (vermoed ik...) het resultaat geef dat je zoekt. In een aantal plaatjes wordt e.e.a. hopelijk duidelijk!

Plaatje 1: de Bloktijden tabel. Die spreekt voor zich... Dat zijn de tijdsblokken die gebruikt worden in de query.
Plaatje 2: het ontwerp van de query.
Je ziet hier, dat de tabel met uren niet is gekoppeld aan een andere tabel. Normaal gesproken doe je dit wel, omdat je alleen zinvolle resultaten wilt zien; records dus die met elkaar overeenkomen. Als je tabellen in een query niet koppelt, maak je een Carthetisch Produkt. Access pakt dan alle records uit de ene (reeks gekoppelde) tabel, en koppelt die aan alle records uit de andere tabel. Als in tabel A 12 records zitten, en in tabel B 10, dan is het resultaat dus (A-1+B1, A1+B2, A1..B10, A2+B1, A2+B2, A2..B10, ... A12+B9, A12+B10). Oftewel: 12*10=120 Records. Daar zit de juiste combinatie dan uiteraard ook bij.

De query die ik hier maak, is een gedeeltelijk Carthetisch produkt: ik neem dus weliswaar van de tabel Uren alle records (niet gekoppelde tabel) maar ik maak tegelijkertijd een criterium, waar gesteld wordt: alleen díe waarden pakken, waar de Uren tussen de Begintijd en de Eindtijd liggen. Dus:
WHERE (tblUren.Hours>=[apptstarttijd] And tblUren.Hours<[appteindtijd])
En daarmee zie je dus meerdere records, voor meerdere tijdblokken.
Het resultaat zie je in het derde plaatje.

Als ik verkeerd zit, dan hoor ik 't wel!
 

Bijlagen

  • Bloktijden tabel.jpg
    Bloktijden tabel.jpg
    27,3 KB · Weergaven: 40
  • Bloktijden.jpg
    Bloktijden.jpg
    85,9 KB · Weergaven: 42
  • Bloktijden Resultaat.jpg
    Bloktijden Resultaat.jpg
    97,7 KB · Weergaven: 32
Je antwoord is zeer verhelderend. Zeer bedankt. Ik had hierna nog een aantal vervolgvragen, maar jouw oplossing (Carthetisch resultaat) zorgt ervoor dat die vragen inmiddels ook beantwoord zijn.

Dank!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan