SELECT query geeft onderstaande error

Status
Niet open voor verdere reacties.

leifoet

Gebruiker
Lid geworden
7 okt 2007
Berichten
326
"De query bevat geen opgegeven expressie als onderdeel van een statistische functie."

Bedoeling
Uit 2 met UNION gekoppelde tabellen A en B met telkens deze 3 velden : bedrag IN, bedrag UIT en datum verrichting
dient dé datum geselecteerd te worden waarop [het bedragIN minus het bedragUIT] voor het eerst negatief wordt.

Het globaal totaal IN / UIT selecteren en berekenen lukt perfect, doch de uitbreiding van de query met de 'datumselectie' loopt mis en geeft bovenstaande error.

Dit is de 'struikeltoevoeging' waarop de error betrekking heeft
IIf(Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT)>0,"",[RCdetails18].datum) AS NegDatum

Als ik [RCdetails18].datum vervang door een willekeurige tekst, dan wordt die in casu wél afgedrukt / uitgevoerd
Tenzij ik mij vergis vermoed ik bijgevolg dat het probleem schuilt in de syntax van de variabele [RCdetails18].datum
(de 2 andere bestaande IIF's voor de berekening van het totalen werken OK zoals hierboven vermeld)

De hulpquery RCdetails18 (die ik overal gebruik in deze query) ziet er uit als volgt :
SELECT Datum, BedragIN, BedragUIT FROM table A
UNION ALL SELECT Datum, BedragIN, BedragUIT FROM table B;

Als bovenstaand query onderdeel (IIF met RCdetails18].datum) perfect zou werken, dan rest mij nog het probleem om dit query onderdeeltje te laten stoppen van zodra de datum is gevonden/vastgelegd waarop de eerste negatieve som voorkomt. Mag ik tevens vragen als en hoe dit mede realiseerbaar is ?


Dank voor tips.
 
Als bovenstaand query onderdeel (IIF met RCdetails18].datum) perfect zou werken, dan rest mij nog het probleem om dit query onderdeeltje te laten stoppen van zodra de datum is gevonden/vastgelegd waarop de eerste negatieve som voorkomt.
Dit snap ik eerlijk gezegd niet; een query kun je niet stoppen. Die doet het, of die doet het niet. Queries laten een dynamisch resultaat zien, op basis van wat jij vraagt. Je kunt hooguit je vraag anders formuleren, zodat er een ander resultaat uitrolt.
De enige manier om een query te 'stoppen' is om er een functie voor te gebruiken die door de recordset (van de totale query) loopt, en bij een gevonden/gewenst resultaat uit de procedure springt.

Wat je andere probleem betreft: een tekst als resultaat van een berekening vind ik sowieso een slecht idee; je formule levert ofwel een tekst of, ofwel een getal/datum. Een combinatie kan niet, en retourneert dan altijd een tekst. Ik vraag me af of je dat zoekt. Probeer dit eens:
PHP:
IIf(Sum(BedragIN)-Sum(BedragUIT)>0,Null,datum) AS NegDatum
 
Na bovenstaand antwoord toch nog enige verduidelijking van mijn probleemstelling.
- met de query 'stoppen' bedoelde ik inderdaad een escape uit betreffend onderdeel nadat het resultaat (= datum) gevonden is - sorry - mijn formulering was wat kort door de bocht
- de tekst als resultaat was simpelweg bedoeld als test d.w.z. (enkel) om zeker te zijn dat mijn query-bouwsel werkt en... om de fout te trachten te localiseren
- de voorgestelde codeaanpassing geeft dezelfde error als hierboven, ook na wijziging van null in isnull - overigens verrast het mij dat PHP-code wordt voorgesteld - Deze rubriek gaat toch over Access (van Microsoft) en over een query die draait in Access, niet op het web - of is dat niet zo bepalend ?
Dank voor tips.
 
Laatst bewerkt:
overigens verrast het mij dat PHP-code wordt voorgesteld - Deze rubriek gaat toch over Access (van Microsoft) en over een query die draait in Access, niet op het web
Ik stel geen PHP code voor, ik gebruik de PHP tag om de code te verduidelijken. Die vind ik mooier dan de CODE tag. IsNull als uitkomst zou nergens, in geen enkele taal, werken. Null daarentegen wel. Mits je gegevens de fout niet genereren, in het welke geval je aan de TRUE uitkomst niet eens toekomt. En daar is hier denk sprake van.
Dus je wilt de query laten 'stoppen'... Dat kan, zoals ik al schreef, niet. Je kunt een query alleen als input gebruiken voor een procedure waarin je een recordset opent op basis van die query, en er regel voor regel doorheen loopt. En dus bij het gewenste record stopt.
In Dummy code ziet dat er dan zo uit:
Code:
Set rs = CurrentDb.OpenRecordset(strSQL)
With rs
     Do Until !BedragIn < !BedragUit
          iRec = !RecID
     Loop
     Exit Do
End With
Maar zonder voorbeeld bestand is er weinig zinnigs van te maken.
 
Zoals de foutmelding aangeeft gebruik je een statistische functie, in dit geval SUM.
Dat betekent dat je moet groeperen over je kolommen.
Voeg dit toe aan het eind van je UNION query:

Code:
GROUPBY Datum, BedragIN, BedragUIT
 
Eerst de foutmelding oplossen helpt mij inderdaad vooruit.
Vaststellingen
=> Na toevoeging in de UNION - subquery van de voorgestelde GROUP BY code krijg ik toch nog deze error bij de hoofdquery:
"De query bevat geen opgegeven expressie ' IIf(Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT)>0,Null,RCdetails18.Datum) ' als onderdeel van een statistische functie."

=> de overige 2 (onderstaande) IIF's in de hoofdquery generen (én genereerden ook vooraleer ik probeerde om de 'datum-IIF' toe te voegen) deze error niet
Dit is de volledige code van de hoofdquery
SELECT Leden.[Leden-Id], Leden.LedenNr, Leden.Familienaam, Leden.Voornaam, Sum(RCdetails18.BedragUIT) AS TBUitAKP, Sum(RCdetails18.BedragIN) AS TBInVKP, Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT) AS SaldoRC, IIf(Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT)>0,0,Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT)) AS SaldoDT, IIf(Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT)<0,0,Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT)) AS SaldoCT, IIf(Sum(RCdetails18.BedragIN)-Sum(RCdetails18.BedragUIT)>0,Null,RCdetails18.Datum) AS NegDatum
FROM Leden INNER JOIN RCdetails18 ON Leden.[Leden-Id]=RCdetails18.ledenid
WHERE (((RCdetails18.Datum)<=[datum?]))
GROUP BY Leden.[Leden-Id], Leden.LedenNr, Leden.Familienaam, Leden.Voornaam
ORDER BY Leden.LedenNr;

Het resultaat is een rapport, op een bepaalde datum, met per lid een saldo (debet of credit) waarbij ik nu de datum van de eventuele initiële debetstand wil toevoegen.
Omdat ik ervan uitging dat het om een simpele (Access)syntaxis fout ging, was mijn query voor de probleemstelling wat vereenvoudigd.

Graag tips om de code te corrigeren.
 
Laatst bewerkt:
Het lijkt mij veel handiger als je een voorbeeldje meestuurt met daarin wat dummy data waarin het probleem is te reproduceren.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan