[Access/SQL] Variabel veld in query/group by

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de onderstaande tabel (versimpeld):
code:
1
 jaar | maand | week | omzet


nu wil ik de gebruiker de mogelijkheid bieden om middels een pull-down menu op een formulier het aggregatieniveau (jaar, maand, week) te kunnen kiezen waarna deze vervolgens een query te zien krijgt ven de omzet per de gekozen periode. Ik ben al een tijdje aan het stoeien maar dit lijkt niet te werken:
code:
1
2
3
SELECT [forms]![frmSelectie]![fldVeld] as Periode, Omzet
FROM tabel
GROUP BY [forms]![frmSelectie]![fldVeld]


Dit komt omdat het veld van het formulier wordt gezien als tekst in plaats van veld, waardoor het niet (goed) werkt. Ik kan natuurlijk in VBA de query eerst "handmatig" opbouwen, maar ik zoek eigenlijk een meer elegante oplossing die binnen de mogelijkheiden van (access)SQL blijft.

Iemand tips? Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het lijkt me toch het handigst als je met vba de query zet, en daarna het rapport uitvoert. Voor filter en sort is nog een aparte property op een report, maar voor een group by niet. Maar afgezien daarvan: lopen de maanden en weken onafhankelijk van het jaar, of is de sleutel (jaar, week) ofzo? Maanden en weken vallen niet goed samen, dus hoe moet ik deze tabel zien? :? ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou ook een query over je tabel kunnen bouwen met daarin een conditioneel veld, in de trant van:

code:
1
IIf([forms]![frmSelectie]![fldVeld]="jaar";[jaar];IIf([forms]![frmSelectie]![fldVeld]="maand";[maand];IIf([forms]![frmSelectie]![fldVeld]="week";[week])))


...en dan op dat veld aggregeren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 05 april 2010 @ 16:03:
Je zou ook een query over je tabel kunnen bouwen met daarin een conditioneel veld, in de trant van:

code:
1
IIf([forms]![frmSelectie]![fldVeld]="jaar";[jaar];IIf([forms]![frmSelectie]![fldVeld]="maand";[maand];IIf([forms]![frmSelectie]![fldVeld]="week";[week])))


...en dan op dat veld aggregeren.
Heb je je voorbeeldje iets aangepast maar dit werkt in één query (dus zonder tussenstap):
code:
1
2
3
SELECT choose([forms]![frmSelectie]![fldVeld],[Week],[Maand],[Jaar]) AS periode, sum(omzet) AS TotaalOmzet
FROM Tabel1
GROUP BY choose([forms]![frmSelectie]![fldVeld],[Week],[Maand],[Jaar]) AS periode


Dacht dat ik dit al geprobeert had maar blijkbaar niet :P
Tnx!
Het lijkt me toch het handigst als je met vba de query zet, en daarna het rapport uitvoert. Voor filter en sort is nog een aparte property op een report, maar voor een group by niet. Maar afgezien daarvan: lopen de maanden en weken onafhankelijk van het jaar, of is de sleutel (jaar, week) ofzo? Maanden en weken vallen niet goed samen, dus hoe moet ik deze tabel zien?
Dit was maar een voorbeeldje om die aggregatieniveaus duidelijk te maken, echte tabel is ingewikkelder.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op maandag 05 april 2010 @ 17:52:
Dit was maar een voorbeeldje om die aggregatieniveaus duidelijk te maken, echte tabel is ingewikkelder.
Als het nog ingewikkelder wordt, dan is dat eigenlijk nog meer reden om gewoon de query in VBA te maken. :p Het is leuk dat je op deze manier in een query naar een bepaald invoerveld kan verwijzen, maar eigenlijk wil je dat niet. Performance is slechter (keys onbruikbaar, te veel zaken worden geëvalueerd), en de begrijpelijkheid ook.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Liever dan VBA zou ik me dan eerst eens afvragen naar welke aggregatieniveaus er nu eigenlijk vraag bestaat. Als een omzetoverzicht per maand of kwartaal heel veel gevraagd is, maar een overzicht per week nauwelijks, kun je beter op voorhand aparte queries bouwen voor de aggregaties die vaak gevraagd worden. Via het invoerformulier wordt dan bepaald welke query moet worden uitgevoerd.
Sowieso: om hoeveel verschillende aggregaties gaat het in je tabel? Wellicht is het aantal queries dat je op voorhand moet bouwen wel beperkt tot een stuk of vier, vijf. Het lijkt dan wel handig op voorhand om je aggregatieniveaus allemaal in één query te stoppen, maar gelet op de problemen waar je nu tegenaanloopt, is het dat eigenlijk dus niet.

[ Voor 13% gewijzigd door Verwijderd op 05-04-2010 23:23 ]

Pagina: 1