Denkfout in tabel???

Status
Niet open voor verdere reacties.

wizard2000

Gebruiker
Lid geworden
10 mrt 2009
Berichten
81
Morgen samen..

Ik maak in een simpele denkfout in een tabel waar in maar niet uit kom
komt ie..
regel 1 kolom vandaag=bv1 .kolom morgen=bv2 .kolom overmorgen.=morgen - vandaag

tot zover gaat ie goed..maar dan

de volgende invoer.

regel 2 vandaag=uitkomst overmorgen regel 1..enz enz

het zal wel een blunder zijn maar ik zie t ff niet

John
 
Wellicht handig als je het probleem duidelijk omschrijft, want zo kan ik er geen chocola van maken. Laat ik er voor het gemak maar even vanuit gaan dat je met 'Regel 1' Record 1 bedoelt, en met 'Regel 2' Record 2. En dat je dus over verschillende records praat op basis waarvan je iets wilt zien. Dan snap ik om te beginnen al niet waarom je een veld 'overmorgen' hebt, want dat is een berekening die rechtstreeks volgt uit de velden [Vandaag] en [Morgen]. En in dit geval (er zijn uitzonderingen te bedenken (voordat iemand reageert met de opmerking dat je wel degelijk berekeningen opslaat)) sla je die berekening dus niet op.
Dus is de situatie: in één record heb je waarden voor vandaag en morgen, en in een ander record wil je die waarden hergebruiken. Hoe, zie ik dan weer niet, al vermoed ik dat je de eerdere (niet opgeslagen) berekening als basis wilt gebruiken?
 
Ja juist ..dat klopt.
de waarde vandaag van record 2 moet de uitkomst van overmorgen uit record 1 zijn.
In record 2 volgt dus weer een overmorgen welk dus de waarde wordt van vandaag uit record 3..enz
 
Ik heb zelf al geprobeerd om deze berekening te maken en op te slaan in een query......maar dat lukt me niet.
 
Lijkt mij ook lastig te maken. Om te beginnen: records in een tabel hebben geen vaste ordening. Je kunt dus niet zomaar stellen dat je de waarde van Record 1 wilt hergebruiken in Record 2, want die records bestaan helemaal niet. Als je sorteert op aflopende datum, heb je een andere recordvolgorde dan als je oplopend sorteert op behandelaar. In beide gevallen heb je 'record 1' en 'record 2'. Je zult dus een stuk specifieker moeten vaststellen hoe je volgorde moet zijn. Dat doe je bijvoorbeeld in een query door te sorteren op datum/tijd (oplopend of aflopend), of op een autonummerveld. Dat laatste is per definitie altijd oplopend, dus daarmee kun je altijd de volgorde van invoer terugvinden. Wat niet wil zeggen dat die sortering ook gelijk is aan datum van binnenkomst, want je kunt records probleemloos in een willekeurige volgorde invoeren.
Kortom: wil je gegevens uit andere records teruglezen in een query, dan kan dat wel, maar je moet de query op een specifieke manier inrichten.
 
Tip: je hebt een subquery nodig.
 
Lijk me toch niet te lukken....en een subquery begrijp ik niet .
Misschien een wat fermere schot voor de boeg ?
Zou er heel blij mee zijn.

John
 
Een subquery is een query die je binnen een andere query gebruikt. Dat kan zijn als apart veld, of als criterium. Voorbeeldje van het laatste: je wilt in een query alle klanten zijn die nog nooit een bestelling hebben geplaatst. Daarvoor maak je een query op basis van je klanten, en ga je kijken in de tabel Bestellingen welke klanten ooit iets besteld hebben. Dat laatste doe je met de query (SELECT DISTINCT KLantID FROM Bestellingen) die een lijst oplevert met KlantID's van alle klanten die besteld hebben. Deze gasten wil je nu juist niet zien, dus in de resultaatquery maak je een criterium, waarin je deze klanten wegfiltert. Je krijgt dan als criterium:
Code:
Not In (SELECT DISTINCT KLantID FROM Bestellingen)
En dat is dus een voorbeeld van een subquery.
Deze variant levert meestal meerdere waarden op, en als criterium is dat prima. In jouw geval heb je één resultaat nodig, en dan niet als criterium maar als gegeven in de query. De subquery moet dus een eigen veld worden. Een voorbeeldje daarvan is het volgende veld:
Code:
Vorige Waterstand: (SELECT TOP 1 Water FROM Meterstanden AS T1 WHERE T1.Datum < Meterstanden.Datum ORDER BY T1.Datum DESC )
Hier wordt een veld [Vorige Waterstand] gemaakt dat wordt gezet naast de huidige watermeting. Dat gebeurt door een query te maken waarin dezelfde tabel wordt gebruikt met een Alias naam (T1). De query filtert de resultaten op meetdatums die kleiner zijn dan de datum in het record (T1.Datum < Meterstanden.Datum), en is dan ook aflopend gesorteerd op datum. Dat levert voor het eerste record niks op (kleinste is nu eenmaal de kleinste), het tweede record laat 1 record zien, het derde record 3, het 10e record 9 en zo verder. Als je een resultaat terug wilt zien in een query, mag er maar één waarde te zien zijn; je kunt geen query als veld gebruiken die meer dan één mogelijke waarde oplevert. Daarom laat de query in het resultaat maar één waarde zien (TOP 1). En dat levert bij elkaar bovenstaande query op. Het resultaat ziet er dan zo uit:
Code:
Datum	VorigWater	Water	Verbruik
15-5-2007		125	0	
15-6-2007	125	131	6	
15-7-2007	131	139	8	
15-8-2007	139	143	4	
15-9-2007	143	148	5	
15-10-2007	148	152	4	
15-11-2007	152	157	5
Noodzakelijk is dus dat je de gegevens op de juiste manier sorteert, want anders werkt deze werkwijze niet.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan