Velden samenvoegen van tabel

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
258
Hoi,

Ik heb een tabel MACHINE met onderstaande velden.
ID, CODE , DATUM, IN, UIT en REFERENTIE

ID : is oplopend nummer
CODE : toestelnummer (130, 140, 150, 155, ...)
DATUM : datum
IN : Starttijd
UIT : Eindtijd
REFERENTIE : zolang DATUM en CODE gelijk is is dit hetzelfde nummer.

Nu willen wij een tabel of query met uniek record CODE en DATUM.
Dwz wanneer meerdere CODE en DATUM dat ik deze records moet samenvoegen.

Zie printscreen.
Voor CODE = 130 en datum = 01/03/2020 heb ik twee records. (je mag er van uit gaan dat het maximaal twee records zijn indien de code dan eenvoudiger is)
Dus de nieuwe tabel of query zou dan moeten worden 130 01/03/2020 07:00 - 10:00 en 13:00 - 17:00

De vraag is dus : op welke manier kan ik dit realiseren ?

Wat ik zou kunnen doen is het eerste record uitlezen en deze gegevens opslaan in een TMP veld.
Dan het tweede record uitlezen. Als code en datum gelijk dan deze gegevens toevoegen aan het TMP veld.
Dan het derde record uitlezen. Als code of datum niet gelijk dat TMP veld opslaan in nieuwe tabel. En deze gegevens van het derde record opslaan in TMP veld.
Enz.

Maar bestaat er een gemakkelijker manier ?
Een Access functie die dit kan doen ?

PS : veld ID mag eventueel weggelaten worden. Of deze waarde is niet meer zo belangrijk.
 

Bijlagen

  • tijd.JPG
    tijd.JPG
    46,8 KB · Weergaven: 75
Als ik het goed begrijp hangt de referentie af van 2 andere velden in de tabel: code en datum. In een ideale database zou dit genormaliseerd moeten worden en in een aparte tabel weggeschreven worden. Maar daar wordt soms van afgeweken als de queries daardoor te complex/traag worden. In één veld meerdere gegevens opslaan zoals 07:00 - 10:00 en 13:00 - 17:00 kan alleen maar in tijdelijke tabellen of recordsets die na gebruik terug verwijderd worden.
Het volgende voorbeeld kan echter heel gemakkelijk gemaakt worden via een query met daarop gebaseerd een rapport.
Machines.JPG
 
In een ideale database zou dit genormaliseerd moeten worden en in een aparte tabel weggeschreven worden.
De tabel is genormaliseerd; de vraag is echter: kunnen we de normalisatie op een makkelijke manier weer om zeep helpen :).
De output kan je inderdaad makkelijk op de manier van noella in een rapport terug laten komen; kwestie van groeperen op de juiste velden (CODE en DATUM) en dan de gegevens in de detailsectie zetten. Maar daarmee heb je ze nog niet in één veld staan.

Mij voorstel zou zijn om de data eerst te verzamelen in een Draaitabel (draai deze query maar eens: TRANSFORM First([UIT]) AS EersteVanUIT SELECT CODE, DATUM FROM Test GROUP BY CODE, DATUM PIVOT [IN]). Dan krijg je één rij met je CODE en DATUM, met daarachter alle tijden als kolomkop, en de UIT datum als waarde.

2020-05-31_13-48-06.png
Deze query kun je dan met een functie wel gebruiken om een nieuwe tabel te vullen (met recordsets dus). Daarbij loop je door de kruistabel, en gebruik je de kolomkoppen met de tijden om de IN tijd te lezen, en de Waarde van die IN-velden om de UIT tijd te lezen. Bij het doorlopen van de kruistabel voeg je dan alleen die kolommen (met de tijden dus) samen die een waarde (=UIT tijd) bevatten.
 
met niet compleet genormaliseerd bedoelde ik:

REFERENTIE : zolang DATUM en CODE gelijk is is dit hetzelfde nummer.

is clash met derde normaalvorm
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan