query KeuzelijstJaar -1 ??

  • Onderwerp starter Onderwerp starter scw
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

scw

Gebruiker
Lid geworden
5 jun 2009
Berichten
530
Goedendag,

Ik gebruik momenteel de volgende SQL code voor een query en dat werkt goed:

Code:
SELECT tblAanmeldingSoorten.Aanmeldingsoort, Count(tblAanmeldingen.Aanmeldingsoort) AS Aantal, Year([Datum]) AS Jaar
FROM tblAanmeldingSoorten INNER JOIN tblAanmeldingen ON tblAanmeldingSoorten.AanmeldingsoortID = tblAanmeldingen.Aanmeldingsoort
WHERE (((Year([Datum]))=[forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]))
GROUP BY tblAanmeldingSoorten.Aanmeldingsoort, Year([Datum])
ORDER BY Count(tblAanmeldingen.Aanmeldingsoort) DESC;

Wat ik nu graag zou willen is ook de aantal aanmeldingen van het jaar vóór het geselecteerde jaar erin te hebben. Nu verwacht ik dat ik hier een nieuwe zelfde query voor zal moeten maken (?) (deze query kopiëren en dan Keuzelijstjaar -1 of hoe zetje dat neer ?????). Maar moet ik vervolgens een samenvoeg query toepassen om het geheel uiteindelijk weer te geven in een rapport??
 
Moet simpel kunnen:
Code:
WHERE (Year([Datum])>=([forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]-1))
 
OK dat begrijp ik,

Maar is het noodzakelijk om hiervoor de query te kopiëren en als een tweede query op te slaan, of kan ik het ook in die ene query combineren? Als het een tweede (aparte) query moet worden, zal ik zeker een samenvoeg query gebruiken om er weer één van te maken om m'n rapport op te baseren??

:thumb:
 
Met de variant die ik heb beschreven kun je met één query uit de voeten. Je dan de WHERE regel aan zoals aaangegeven. Je pakt dan dus wel altijd vorig jaar + huidig jaar. Als je ook het huidige jaar apart wilt, moet je er een aparte query van maken.
 
OK ik heb er dus een aparte query van gemaakt. Nu ben ik bezig met de samenvoegquery:

Code:
SELECT Aanmeldingsoort, Aantal, Jaar FROM qryAanmeldingenPerSoort;
UNION SELECT Aanmeldingsoort, Aantal, Jaar FROM qryAanmeldingenPerSoortVorigJaar

Alleen ik krijg het niet voor elkaar, om de Aanmeldingsoorten uniek te hebben én de rijen op desbetreffende jaren en eronder getallen:

Dus

Kolom1 Kolom2 Kolom3
Aanmeldingsoorten [Uniek] 2009 2010

Aanmeldingsoort A 50 60
Aanmeldingsoort B 40 50
etc.

Hoe krijg ik dat voor elkaar :confused: Telkens wanneer ik GROUP BY erbij zet gaat het al mis... :(
 
Code:
SELECT DISTINCT Aanmeldingsoort, Aantal, Jaar FROM qryAanmeldingenPerSoort;
UNION ALL
SELECT DISTINCT Aanmeldingsoort, Aantal, Jaar FROM qryAanmeldingenPerSoortVorigJaar
 
nog niet

Excuses, het is hem nog niet, mogelijk was m'n voorbeeld niet zo duidelijk... daarom hierbij een voorbeeld als bijlage gedaan ;)
 

Bijlagen

Zoals eerder aangegeven kun je dit oplossen door je WHERE clause aan te passen.
Zie eerdere reactie van Octafish.
Een UNION heb je dus niet nodig.

Tardis
 
Sorry ik ben de draad even kwijt... ik hoef de Union dus niet te gebruiken volgens Tardis. Nu heb ik wel het gewenste resultaat in twee aparte query's:

Code:
SELECT tblAanmeldingSoorten.Aanmeldingsoort, Count(tblAanmeldingen.Aanmeldingsoort) AS Aantal, Year([Datum]) AS Jaar
FROM tblAanmeldingSoorten INNER JOIN tblAanmeldingen ON tblAanmeldingSoorten.AanmeldingsoortID = tblAanmeldingen.Aanmeldingsoort
WHERE (((Year([Datum]))=[forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]-1))
GROUP BY tblAanmeldingSoorten.Aanmeldingsoort, Year([Datum])
ORDER BY Count(tblAanmeldingen.Aanmeldingsoort) DESC;

Code:
SELECT tblAanmeldingSoorten.Aanmeldingsoort, Count(tblAanmeldingen.Aanmeldingsoort) AS Aantal, Year([Datum]) AS Jaar
FROM tblAanmeldingSoorten INNER JOIN tblAanmeldingen ON tblAanmeldingSoorten.AanmeldingsoortID = tblAanmeldingen.Aanmeldingsoort
WHERE (((Year([Datum]))=[forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]))
GROUP BY tblAanmeldingSoorten.Aanmeldingsoort, Year([Datum])
ORDER BY Count(tblAanmeldingen.Aanmeldingsoort) DESC;


Dat brengt het gewenste resultaat, afgezien dat het in twee query's staat en niet zoals in het voorbeeld. Moet ik dan echt geen Union gebruiken?? Hoe zet ik het dan neer?? :confused:
 
En volgens mij :D
Zie mijn eerdere code:

Code:
SELECT tblAanmeldingSoorten.Aanmeldingsoort, Count(tblAanmeldingen.Aanmeldingsoort) AS Aantal, Year([Datum]) AS Jaar
FROM tblAanmeldingSoorten INNER JOIN tblAanmeldingen ON tblAanmeldingSoorten.AanmeldingsoortID = tblAanmeldingen.Aanmeldingsoort
[B][COLOR="blue"]WHERE (Year([Datum])>=[forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]-1)[/COLOR][/B]
GROUP BY tblAanmeldingSoorten.Aanmeldingsoort, Year([Datum])
ORDER BY Count(tblAanmeldingen.Aanmeldingsoort) DESC;
 
Inderdaad is de output wel juist, alleen nog in de verkeerde volgorde hiermee. Mijn doel is om de jaren als kolomkop te hebben en Grouped by de Aanmeldingsoort. Met deze SQL code verschijnt iedere aanmeldingsoort 2x... Of kan dit niet anders en moet ik deze opmaak verzorgen in het rapport??
 
Uiteraard krijg je voor elk jaar nu een apart record, want dat heb je zo ingesteld. Waarschijnlijk wil je, als je de jaren in aparte kolommen wilt, een Kruistabel hebben. Zet de query derhalve om naar het type Kruistabelquery, met Jaar als kolomkop en Aanmeldingssoort als rijkop. En uiteraard een veld aanwijzen als waarde ;)
 
nog net niet

Dit (de kruistabel) lijkt inderdaad de oplossing! Geweldig..

Code:
TRANSFORM Count(tblAanmeldingen.Aanmeldingsoort) AS Aantal
SELECT tblAanmeldingSoorten.Aanmeldingsoort
FROM tblAanmeldingSoorten INNER JOIN tblAanmeldingen ON tblAanmeldingSoorten.AanmeldingsoortID = tblAanmeldingen.Aanmeldingsoort
WHERE (((Year([Datum]))>=[forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]-1))
GROUP BY tblAanmeldingSoorten.Aanmeldingsoort
ORDER BY Count(tblAanmeldingen.Aanmeldingsoort) DESC 
PIVOT Year([Datum]);


Maar aargghhhh... nu zegt Access weer:
The Microsoft Office Access database engine does not recognize [forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]
as valid field name or expression. :(:( Wat gerommeld met de field columns maar ik krijg het niet voor elkaar :( Hoe dit weer op te lossen??
 
Het kan zijn dat je deze regel
WHERE (((Year([Datum]))>=[forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]-1))
moet veranderen in:
WHERE (Year([Datum])>=[formulieren]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]-1)
Of probeer anders eens:
WHERE (Year([Datum])>=Year(Date())-1)
 
Euhm,

Doe ik de eerste krijg ik nog steeds dezelfde melding :confused:

Wanneer ik je laatste optie probeer, krijg ik:

Cannot have aggregate function in ORDER BY clause (Count(tblAanmeldingen.Aanmeldingsoort)).
:rolleyes:
 
Maak eens een simpel excelletje met wat data uit de tabel? Kan met een Export naar Excel vanuit de tabel, hoeft verder niet zo mooi te zijn. Dan probeer ik 'm wel even uit.
 
Wat ik al dacht....

Code:
TRANSFORM Count(tblAanmeldingen.Aanmeldingsoort) AS Aantal
SELECT tblAanmeldingSoorten.Aanmeldingsoort
FROM tblAanmeldingSoorten INNER JOIN tblAanmeldingen ON tblAanmeldingSoorten.AanmeldingsoortID = tblAanmeldingen.Aanmeldingsoort
WHERE (((Year([Datum]))>=Year(Date())-1))
GROUP BY tblAanmeldingSoorten.Aanmeldingsoort
PIVOT Year([Datum]);
Je kunt niet (aflopend) sorteren op een waardeveld in een kruistabel.
 
het werkt!!!!!

Jah hij werkt!!!!!!!!

Code:
TRANSFORM Nz(Count(tblAanmeldingen.Aanmeldingsoort),0) AS Aantal
SELECT tblAanmeldingSoorten.Aanmeldingsoort
FROM tblAanmeldingSoorten INNER JOIN tblAanmeldingen ON tblAanmeldingSoorten.AanmeldingsoortID=tblAanmeldingen.Aanmeldingsoort
WHERE (((Year([Datum]))>=Year(Date())-1))
GROUP BY tblAanmeldingSoorten.Aanmeldingsoort
PIVOT Year([Datum]);

Ik heb er ook nog een Nz functie tussengeplaatst. Mag ik nog twee vraagjes stellen? Bij deze...

- Wat doet die nu precies bij de WHERE functie? Pakt Access nu altijd het huidige jaar waar we nu in zitten en dan plus -1?
Ik probeerde het te testen door m'n pc tijd een jaar achteruit en vooruit te zetten, maar hij geeft volgens mij geen kolom weer voor een jaar waarin die geen records heeft, dus dat is dan niet te controleren... Want ik begrijp nog steeds niet waarom hij niet die andere versie pakte?
Code:
WHERE (Year([Datum])>=([forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]-1))

- Hoe zouden de percentages er nog achter kunnen in SQL, dus verschil jaar -1 en jaar (huidig) in %?

Superbedankt :d
 
Heb je 'm al uitgeprobeerd dan met de keuzelijst? Want ik zie niet in waarom die niet zou werken, tenzij de veldeigenschappen niet kloppen. Bjjvoorbeeld als je met Year([Datum]) een getal probeert te vergelijken met tekst uit forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar]. En dat zou je nog kunnen ondervangen door dat formulierveld te converteren: cInt(forms]![frmSelecteerjaarAanmeldingen]![KeuzelijstJaar])
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan