Het is al weer een tijdje geleden dat ik Access gebruikt heb, maar ik ben toch weer een keer gaan hobbyen. Ik had al weer een hele tijd geleden voor mijn vader een database gemaakt, waarin een puntensysteem staat voor wielrenners. Zaterdag heb ik geprobeerd om er een rapportje bij te maken en dat ging bijna helemaal goed, maar op het einde bleef ik met een klein probleempje over...
Het datamodel komt er op neer dat er renners zijn met een naam en een land en dergelijke, die voor een jaartal punten krijgen en in dat jaar voor een bepaalde ploeg rijden. Ik heb dus de tabellen:
Ik heb nu een query gemaakt die voor een een jaartal de ploegen opvraagt met de renners en daarbij de punten, deze optelt sorteert op totaal aantal punten en dan sorteert op rennerpunten. Een aardige query met 2 subqueries, maar daar was na ff proberen wel uit te komen. De query stop ik dan in een rapport die dan weer geprint kan worden. Aangezien niemand dit verhaal nog snapt zal ik even een voorbeeld laten zien:
http://www.cyclingranking.com/pdf/ridersteams/ridersteams1909.pdf
Nu heb ik het volgende probleem dat het voor een aantal renners in een bepaald jaar niet bekend is voor welke ploeg dat hij gereden heeft (zeker vroeger komt dat vaak voor), maar ik wil dat juist duidelijk maken door deze renners in een aparte lijst op te nemen. Ik heb daarom van de query daarom een left join gemaakt. Dat doet hij dus ook nog goed, maar als ik nu dus de zaak in mijn rapport ga printen, heeft hij dus geen waarde voor de ploeg (logisch). Ik wil dan eigenlijk 'Unknown team' printen of iets dergelijks, maar daar gaat het bij me mis... Zie pagina 3 van de bovenstaande PDF.
Ik dacht dat als ik in het rapport voor control source 'Ploegnaam' een Iif constructie zou verzinnen ik er wel uit zou kunnen komen.
Dus bij control source voor 'Ploegnaam' iets als:
Ik heb de helpfile doorgenomen en het op allerlei manieren geprobeerd, maar geen van deze manieren werkt. Hij geeft of de veelzeggende error '#Fout', of hij zet overal 'Unknown team' neer (dus ook voor teams die wel bestaan).
Wat is nu mijn vraag: bij een left join query, voor records waar geen match voor gevonden wordt, hoe kunnen deze records onderscheiden worden. Krijgen deze de waarde NULL of "", of iets anders?? en hoe kan ik hier dan weer op checken?
Kan ik misschien iets rechtstreeks in de query stoppen, zodat bij records waarvoor geen match bestaat er de waarde 'Unknown team' geschreven wordt? In standaard SQL zou ik denken van niet, maar met Microsoft weet je het nooit wat voor fratsen mogelijk zijn...
Heeft iemand een ander idee om dit probleem(pje) op te lossen?
Als het niet lukt, dan is er geen man overboord (mijn vader is toch al blij met zijn rapportje), maar ik vind het zelf een beetje zonde als het allemaal lukt en dan net dit kleine dingetje misgaat...
Het datamodel komt er op neer dat er renners zijn met een naam en een land en dergelijke, die voor een jaartal punten krijgen en in dat jaar voor een bepaalde ploeg rijden. Ik heb dus de tabellen:
code:
1
2
3
4
5
| Jaar (jaartal) Renner (ID, naam, landID) Land (ID, Naam, Afkorting) Punten (ID, Jaartal, RennerID, PloegID, Punten) Ploeg (ID, naam) |
Ik heb nu een query gemaakt die voor een een jaartal de ploegen opvraagt met de renners en daarbij de punten, deze optelt sorteert op totaal aantal punten en dan sorteert op rennerpunten. Een aardige query met 2 subqueries, maar daar was na ff proberen wel uit te komen. De query stop ik dan in een rapport die dan weer geprint kan worden. Aangezien niemand dit verhaal nog snapt zal ik even een voorbeeld laten zien:
http://www.cyclingranking.com/pdf/ridersteams/ridersteams1909.pdf
Nu heb ik het volgende probleem dat het voor een aantal renners in een bepaald jaar niet bekend is voor welke ploeg dat hij gereden heeft (zeker vroeger komt dat vaak voor), maar ik wil dat juist duidelijk maken door deze renners in een aparte lijst op te nemen. Ik heb daarom van de query daarom een left join gemaakt. Dat doet hij dus ook nog goed, maar als ik nu dus de zaak in mijn rapport ga printen, heeft hij dus geen waarde voor de ploeg (logisch). Ik wil dan eigenlijk 'Unknown team' printen of iets dergelijks, maar daar gaat het bij me mis... Zie pagina 3 van de bovenstaande PDF.
Ik dacht dat als ik in het rapport voor control source 'Ploegnaam' een Iif constructie zou verzinnen ik er wel uit zou kunnen komen.
Dus bij control source voor 'Ploegnaam' iets als:
code:
1
2
3
| =Iif([Ploegnaam],[Ploegnaam],'Unknown Team') of =Iif([Ploegnaam] is null, 'Unknown team', [Ploegnaam]) of =Iif([Ploegnaam]='','Unknown team', [Ploegnaam]) |
Ik heb de helpfile doorgenomen en het op allerlei manieren geprobeerd, maar geen van deze manieren werkt. Hij geeft of de veelzeggende error '#Fout', of hij zet overal 'Unknown team' neer (dus ook voor teams die wel bestaan).
Wat is nu mijn vraag: bij een left join query, voor records waar geen match voor gevonden wordt, hoe kunnen deze records onderscheiden worden. Krijgen deze de waarde NULL of "", of iets anders?? en hoe kan ik hier dan weer op checken?
Kan ik misschien iets rechtstreeks in de query stoppen, zodat bij records waarvoor geen match bestaat er de waarde 'Unknown team' geschreven wordt? In standaard SQL zou ik denken van niet, maar met Microsoft weet je het nooit wat voor fratsen mogelijk zijn...
Heeft iemand een ander idee om dit probleem(pje) op te lossen?
Als het niet lukt, dan is er geen man overboord (mijn vader is toch al blij met zijn rapportje), maar ik vind het zelf een beetje zonde als het allemaal lukt en dan net dit kleine dingetje misgaat...