Optellen hoe vaak iets voorkomt

Status
Niet open voor verdere reacties.

Stephan1188

Gebruiker
Lid geworden
1 mei 2014
Berichten
7
Beste allemaal,

Helaas zit ik met een probleem in MS Access waar ik niet uit kom. Hopelijk kan en is er iemand bereid om me te helpen.

Ik heb een database met zo'n 500.000 records. Hierin staan staan tenders waarin meerdere leveranciers hebben deelgenomen (let op: meerdere records per tender, zowel de leverancier die "gewonnen" heeft als de leveranciers die niet gewonnen hebben).

Nu wil ik op basis van de Beslissingsdatum, dus in chronologische volgorde (vanaf 2008 tot en met 2013), optellen hoe vaak een leverancier is voorgekomen. Tellen hoe vaak een leverancier in de totale database is voorgekomen is geen probleem, maar het gaat er om dat elke keer als een leverancier heeft deelgenomen, zijn "ervaring" met 1 wordt vergroot.

Voorbeeld: zie afbeelding

Zoals hopelijk duidelijk wordt uit het voorbeeld wil ik op basis van de beslissingsdatum een soort optelsom maken van hoe vaak een leverancier is voorgekomen. Zoals bij leverancier A te zien is wordt elke keer als deze voorgekomen is er 1 punt bij de ervaring opgeteld (evenals bij leverancier D).

Dit is het belangrijkste. Het zou helemaal fantastisch zijn wanneer iemand me kan vertellen hoe ik de periode waarop Access deze optelsom baseerd ook nog in kan stellen. Ter verduidelijking: in het beste geval zou ik deze optelsom willen baseren op de 2 jaar voor (en inclusief) de beslissingsdatum.

Hopelijk kan iemand me vertellen hoe ik dit in Acces kan doen.

Bij voorbaat dank!

Stephan
 

Bijlagen

  • Capture222.JPG
    Capture222.JPG
    19 KB · Weergaven: 88
Ik snap je voorbeeldje niet helemaal; je hebt het over datums, maar je 'datumveld' laat maand-jaar zien, geen datums. Verder heb je een veld ID dat in je query alleen maar in de weg zit. Je kunt je resultaat simpel maken met een Totalen query, waarbij je telt op het ID velt en groepeert op datumgrens en leverancier.
 
Beste OctaFish,

Dank voor je reactie. Ter verduidelijking heb ik een excel bestandje bijgevoegd met daarin een klein gedeelte van de data zoals die in mijn Table staat.

Het zou mooi zijn als ik de experience er zo uit kan laten komen in Access zoals het erin dit bestandje uitziet. Otfewel, naarmate de tijd verstrijkt optellen hoe vaak een leverancier is voorgekomen.

Echter zou het nog mooier zijn wanneer ik deze ervaring zou kunnen baseren op de X-aantal jaar voor (en inclusief) de beslissingsdatum. Oftewel, een soort "rollend tijdframe" van een X aantal jaar/maanden/dagen, waarop deze "ervaring" gebaseerd wordt.

Eventueel nog als "extra extraatje": Zoals je ziet in de data is het mogelijk dat een leverancier meerdere malen vertegenwoordigt is binnen een tender (zelfde sourcingNr). Dit komt omdat er binnen deze tender dan meerdere producten vergeven werden. Zoals het er nu uitziet wordt simpelweg elke keer getelt als een leverancier deelgenomen heeft. Zou het mogelijk zijn dit te beperken tot maximaal 1x per sourcingnr? Dit is additioneel, aangezien ik waarschijnlijk elke deelname (dus voor elk afzonderlijk onderdeel, ook al zijn deze in één tender vergeven) als "ervaring" wil beschouwen.

Hopelijk is mijn vraagn nu duidelijker.

Bij voorbaat dank,

Stephan
 

Bijlagen

Beste OctaFisch,

ik heb inmiddels een gedeeltelijke oplossing.

D.m.v.: DCount("*";"[Table1]";"Supplier_ID = " & [Supplier_ID] & " AND ID <= " & [ID])

Hiermee krijg ik dezelfde "ervaring" (record voor record) uitgerekend zoals in het Excel bestand hierboven.

Helaas heb ik nog geen idee/nog niets daarover gevonden, hoe ik dit nu kan baseren op een X-aantal jaar voor (en inclusief) de beslissingsdatum, ipv van op de hele dataset. Hetzelfde geldt voor het "extra extraatje", zoals beschreven in mijn vorige vraag.

Zou heel fijn zijn als jij misschien een oplossing, idee of tip zou kunnen geven.

Bij voorbaat dank!

Stephan
 
De nummers zoals je ze in je voorbeeldje gebruikt kun je met een query laten berekenen.
Code:
SELECT a.Sourcing_Nr, a.Supplier_ID, Count(*) AS VolgNummer, a.Decision_Date, a.Part_Nr, a.Factory_Nr, a.A_Price_EUR, a.Experience
FROM Sheet1 AS a, Sheet1 AS b
WHERE (((a.AuID)>=[b].[AuID]) AND ((a.Sourcing_Nr)=[b].[Sourcing_Nr]) AND ((a.Supplier_ID)=[b].[Supplier_ID]))
GROUP BY a.Sourcing_Nr, a.Supplier_ID, a.Decision_Date, a.Part_Nr, a.Factory_Nr, a.A_Price_EUR, a.Experience
ORDER BY a.Sourcing_Nr, a.Supplier_ID, Count(*);
Waarschijnlijk heet jouw tabel niet Sheet1, dus de naam zul je nog even moeten aanpassen.
 
Beste Michel,

Helaas snap ik je laatste reactie niet helemaal. Mijn SQL kennis is helaas geen hoog niveau, dus ik probeer zoveel mogelijk met de Access Interface te werken.

Als ik je reactie lees dan denk ik dat jouw SQL code dezelfde nummers genereerd als mijn DCount("*";"[Table1]";"Supplier_ID = " & [Supplier_ID] & " AND ID <= " & [ID])

Zoals in bericht #4 aangegeven zou ik dit graag baseren op een "rollend tijdframe" waarbij deze "ervaring" constant gebaseerd wordt op een X-aantal jaar voor (en inclusief) de beslissingsdatum.

Hopelijk heb jij een idee hoe ik dit voor elkaar kan krijgen.

MVG,

Stephan
 
Je hebt in je Excel sheet geen (auto)nummerveld staan, dus dat heb ik na het importeren zelf toegevoegd. Heet in mijn geval dus AuID, en bij jou ID. Verder heet Sheet1 bij jou Tabel1, dus die naam moet je ook vervangen. Verder kun je met sleuren en pleuren de complete SQL in een nieuwe query plakken, en zal hij werken. Als je geen goede voorbeelden post, kunnen wij geen werkende oplossingen teruggeven :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan