Samenvoegen van records

Status
Niet open voor verdere reacties.

rebirth

Gebruiker
Lid geworden
17 jun 2008
Berichten
170
In mijn database bekom ik via een query een tabel die er als volgt uitziet:

persoonsID | startdatum | einddatum | bedrag | aantal dagen | totaal bedrag

In deze tabel zitten er personen (persoonsID), die slechts 1 keer in de tabel voorkomen, maar sommige personen (persoonsID) komen meerdere keren voor in de tabel, met compleet verschillende gegevens.
Nu had ik graag deze gegevens willen samenvoegen, door de kleinste startdatum te nemen, de grootste einddatum, wanneer ze verschillende keren voorkomen in de kolom bedrag geen bedrag, maar de vermelding "Zie bijlage", het totale aantal dagen, en het totale bedrag van de verschillende lijnen.

Nu is mijn vraag uiteraard, kan dit in Access? Kan ik dit automatisch laten gebeuren, of gaat de gebruiker dit toch manueel moeten uitvoeren, met de kans op fouten?

Wie kan me wat op weg helpen?

Alvast bedankt.

Mvg, Bjorn
 
Op zich kan het wel, met een Totalenquery waarin je groepeert op de juiste functie. Zo zal Min([Startdatum]) je de kleinste datum opleveren en Max([Einddatum]) de grootste. Dat zie je dan, omdat je groepeert op PersoonID, in één record terug. [Aantal dagen] en [Totaalbedrag] doe je uiteraard met Som. Maar dit:
... wanneer ze verschillende keren voorkomen in de kolom bedrag geen bedrag, maar de vermelding "Zie bijlage",
laat de wenkbrauwen fronsen tot achter in mijn nek :). Bedragen zijn geld = numeriek = valuta. "Zie bijlage" is daarentegen tekst. Teks in een valutaveld? Daggut nie....
 
Dat probleem dacht ik op te lossen door dit in een tekstveld te plaatsen. Tenslotte moet er toch niets meer gebeuren, dit is enkel voor rapportage. Maar hoe kan ik dit dan in die gevallen vervangen door die tekst? Enig idee Octa Fish?
 
In mijn database bekom ik via een query een tabel die er als volgt uitziet:
persoonsID | startdatum | einddatum | bedrag | aantal dagen | totaal bedrag

Volgens mij ga je van kwaad tot erger als je van numerieke velden tekstvelden gaat maken. Eigenlijk snap ik je initiële probleem ook niet eens; dit riekt als een Tabelmaak query?? Waarom, vraag ik me dan af....
Verderop vermoed ik dan dat je tabel niet goed genormaliseerd is en dat je dus die gegevens wilt samenvoegen.
sommige personen (persoonsID) komen meerdere keren voor in de tabel, met compleet verschillende gegevens
Maar dan snap ik die bedragen weer niet, want die horen in een gekoppelde tabel thuis waar je PersoonID nu juist wél meerdere keren voor mag komen. Want dan heb je het over betalingen etc. Dat je dan inschrijfdatums etc. maar één keer wilt hebben, snap ik dan weer wel :).
 
Reden waarom ik dit nodig heb, is om vanuit mijn database van kinderopvang op een automatische manier ieder jaar de gegevens voor belastings attesten te kunnen afdrukken. Die data zit er al van jaren ver in, dus als mijn tabel niet goed genormaliseerd is, heb ik een groot probleem, vrees ik.

Die bedragen zijn afhankelijk van de duur van aanwezigheid, en zijn meestal voor een jaar vast, maar kunnen uitzonderlijk gedurende het jaar veranderen.

Het lijkt me, als ik je goed begrijp, dat er niet meteen een oplossing voor mijn vraag is?
 
Dat weet ik zo niet; ik snap dus het probleem nog niet helemaal. Wél dat je blijkbaar dubbele personen hebt, maar niet hoe je dat met betalingen niet kan koppelen aan de juiste persoon. Tenzij je alle betalingen in de personen tabel hebt opgeslagen. En dus geen aparte gekoppelde tabel hebt. Zelfs dan zou ik er eerder voor kiezen om de tabel te scheiden zodat je de betalingen wél in een één-op-veel tabel kunt wegschrijven. Dan heb je nog wel het probleem van het mergen van je persoonsgegevens, wat vermoedelijk deels handmatig zal moeten als de velden verschillend gevuld zijn. En als dat gedaan is, moet je alle betalingsrecords natuurlijk koppelen aan dat ene klantID dat je dan overhoudt.
 
OctaFish, zou het helpen indien ik je eens een voorbeeld van de tabel bezorg? Al die gegevens komen allemaal uit 1 tabel, namelijk opvang. Er zijn hiervoor eigenlijk geen gekoppelde tabellen. Alleen plaats ik die hier niet graag openbaar. Kan ik je die eventueel op een andere manier bezorgen?
 
Je mag 'm wel mailen, dan probeer ik er vanavond even naar te kijken.
 
Kan ik dat ergens terugvinden OctaFish? In elk geval alvast bedankt!
 
Ik wil je zeker niet opjagen hoor OctaFish, maar zou je toevallig al eens mijn mailtje hebben kunnen bekijken? :eek:
 
Het mailtje heb ik bekeken, de database zelfs ook :). Morgen heb ik tijd om er naar te kijken.
 
Ik heb er naar gekeken, en ik snap eerlijk gezegd de opzet van je tabel Factuur niet helemaal. Daar zitten volgens mij overtollige velden in (Maand, Jaar waarbij Jaar ook nog eens een tekstveld is en geen getal) en vooral het veld [Kind] dat volslagen overbodig is, omdat je al het veld KindID hebt. Op basis daarvan moet je altijd de juiste Kind gegevens kunnen opzoeken in de tabel [Kind]. Dat verandert volgens mij ook de strekking van je oorspronkelijke vraag:
In deze tabel zitten er personen (persoonsID), die slechts 1 keer in de tabel voorkomen, maar sommige personen (persoonsID) komen meerdere keren voor in de tabel, met compleet verschillende gegevens.

Tenzij ik het verkeerd begrijp (want ik snap je vraag eigenlijk nog steeds niet) en dat je het hebt over dubbele boekingen etc. in de tabel factuur. Want die zijn er inderdaad ook. Op zichzelf is het vreemd dat het überhaupt kan; pakken we er een voorbeeldje bij: 27-11-2015 en KindID 404. Die is, volgens je tabel, die dag 2 keer langsgekomen. Want je hebt daar 2 registraties voor gemaakt.
Code:
Datum	KindID	Periode van	Periode tot	Beginuur	Einduur
27-11-2015	404	1-10-2015	31-12-2015	06:50:00	17:10:00
27-11-2015	404	1-10-2015	31-12-2015	08:25:00	18:25:00

Die data haal je vermoedelijk uit de tabel [Opvang, waar het eigenlijke probleem zit. Want ik zie in Factuur velden die daar ook helemaal niet thuis horen (redundantie). In Opvang zie ik dan dit:
Code:
Datum	Kind	Beginuur	Einduur	duur	Factuur	Facturatie	Dagbedrag	Vastbedrag	Dagtotaal
27-11-2015	404	06:50	17:10	10:20	1	1		21,5	€ 0,00
27-11-2015	404	08:25	18:25	10:00	1	1		21,5	€ 0,00
In essentie dezelfde uren als in Factuur (waar ze dus helemaal niet zouden mogen staan).
De vraag is enerzijds: hoe is het mogelijk dat je één kind 2 keer kan registreren op dezelfde tijd (verkeerde indexen), en anderzijds: hoe kom je er van af :).
Om de laatste vraag te beantwoorden, kun je inderdaad doen wat je zelf voorstelt: de twee data(tijd)velden samenvoegen en de laagste begintijd en de hoogste eindtijd te nemen. Of dat correcte records oplevert, zou ik eerst eens nalopen.

1. In de db die je hebt gestuurd gaat het om zo'n 93 dubbele registraties over de laatste jaren, dus dat is nog wel te controleren met de hand.
2. Als je akkoord bent en wilt opschonen, dan zou ik eerst in Opvang een Autonummerveld toevoegen (heb je nu niet) zodat je records kunt filteren op de hoogste of laagste waarde. Maakt volgens mij niet zoveel uit welke.
3. Vervolgens maak je een query die je laagste begintijd, de hoogste eindtijd en eventuele andere velden die je over wilt zetten groepeert op Datum + KindID.
4. Op het ID veld dat je hebt toegevoegd pak je dan Min of Max. Volgens mij heb je dan namelijk de gewenste unieke combinatie. Elk record in die query moet uniek zijn.
5. Van die query maak je dan een tabel (Tabelmaakquery) zodat de aan te passen records makkelijk zijn te vinden straks.
6. Die nieuwe tabel koppel je aan de tabel [Opvang]. Als het goed is, zie je alleen de records die je over wilt houden in Opvang. Deze records werk je bij met de waarden uit de tijdelijke tabel.
Je hebt nu nog steeds dubbele records, maar één record (met het Min of Max nummer) is nu compleet. Het andere record kan dus weg.
7. Maak een verwijder query waarbij je de andere set nummers verwijdert.

Zorg er vervolgens voor, als je van de dubbele records af bent, dat je de tabellenstructuur op orde brengt. Deze problemen had je nooit gehad als de indexen goed waren geweest, en verwijder gelijk ook alle data die niet in de tabel thuishoort. In Factuur zijn dat best veel velden, namelijk: alle velden die ook al in Opvang staan. En Kind.
Overigens schijnt het in Nederland verboden te zijn om factuurnummers te genereren die niet opvolgend oplopen. Er mogen, kortom, in factuurnummers geen gaten zitten. Dat is blijkbaar anders in België :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan