Opgelost Parameterwaarde opgegeven

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

janluc

Gebruiker
Lid geworden
10 jul 2016
Berichten
68
Besturingssysteem
Windows 11
Office versie
2016
Zie bijlage.
Ik wil graag van mijn klanten weten hoelang ze al bij mij zijn, en wat ze gemiddeld per jaar aan me kwijt zijn.
Als ik de query uitvoer, wordt zonder ik dat wil om parameterwaardes gevraagd, maar ik kan er niet achter komen waarom. Door telkens op OK te klikken verdwijnen ze overigens wel, en krijg ik het gewenste resultaat, maar ik heb kennelijk een fout gemaakt het ontwerp van de query. Kan iemand me helpen?
 

Bijlagen

Ga eens naar het Query SQL venster, en kopieer de complete string eens naar een berichtje, dan kan ik er even naar kijken.
 
Bekijk de group by instructie: daar ga je groeperen op resultaten van de groupage in de query. Dat is een circulaire berekening die fouten veroorzaakt. Kan je aangeven wat je probeert te bereiken?
 
Ga eens naar het Query SQL venster, en kopieer de complete string eens naar een berichtje, dan kan ik er even naar kijken.
SELECT tblCliënten.Achternaam, tblCliënten.Roepnaam, Min(Year([DatumFactuurregel])) AS Eerste, Max(Year([DatumFactuurregel])) AS Laatste, DateDiff("y",[Eerste],[Laatste])+1 AS Aantal, Sum(tblFactuurregels.Bedrag) AS SomVanBedrag, [SomVanBedrag]/([Aantal]) AS GemiddeldPerJaar
FROM tblCliënten INNER JOIN tblFactuurregels ON tblCliënten.ClientId = tblFactuurregels.ClientID
GROUP BY tblCliënten.Achternaam, tblCliënten.Roepnaam, DateDiff("y",[Eerste],[Laatste])+1, [SomVanBedrag]/([Aantal]), tblCliënten.ClientId
ORDER BY [SomVanBedrag]/([Aantal]) DESC;
 
Bekijk de group by instructie: daar ga je groeperen op resultaten van de groupage in de query. Dat is een circulaire berekening die fouten veroorzaakt. Kan je aangeven wat je probeert te bereiken?
Ik wil per klant weten hoeveel ik gemiddeld per jaar aan ze in rekening heb gebracht.
 
Ik snap niet waarom je een DateDiff functie gebruikt om het aantal jaren te berekenen. Sowieso gebruik je daarvoor nu geen datums (Eerste en Laatste zijn jaartallen, geen datum) dus daar komt een heel gek getal uit, áls er al een uitkomst is. Je kunt het aantal verstreken jaren gewoon berekenen met Aantal: [Laatste]-[Eerste] +1. Of je gebruikt de DateDiff op de eerste en laatste factuurdatum, dat werkt ook. Dus wellicht dat dit je probleem al oplost.

Maar ik kijk straks wel even op de computer naar je bijlage.
 
Ik heb er naar gekeken, en tot mijn verbazing deed de DateDiff het wél, maar de simpelere variant werkt uiteraard beter. Je gebruikte in je query een niet-bestaand veld, gebaseerd op een berekening. Dat levert dan al een parameter vraag op. En, veel ernstiger, je gebruikte de functie Group By voor velden die toch echt een berekening zijn. Gek genoeg heb je de juiste functie (Expression) wél gebruikt bij andere berekeningen, dus je kent het bestaan van de juiste syntax :).

Code:
SELECT tblCliënten.ClientId, tblCliënten.Achternaam, tblCliënten.Roepnaam, 
Min(Year([DatumFactuurregel])) AS Eerste, 
Max(Year([DatumFactuurregel])) AS Laatste,
[Laatste]-[Eerste]+1 AS Aantal, Sum(tblFactuurregels.Bedrag) AS Totaal, 
[Totaal]/([Aantal]) AS  GemiddeldPerJaar
FROM tblCliënten INNER JOIN tblFactuurregels 
ON tblCliënten.ClientId = tblFactuurregels.ClientID
GROUP BY tblCliënten.ClientId, tblCliënten.Achternaam, tblCliënten.Roepnaam;
 
Dank je wel Octafish! Ik leer hier weer veel van.
Fijne avond, Jan-Luc
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan