Toon posts:

[Access 2003] Bedragen optellen

Pagina: 1
Acties:
  • 304 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zal nogmaals mijn probleem iets duidelijker uitleggen.
Wat: gegevens verticaal laten optellen in een query

Wat heb ik gedaan: zelf gewoon proberen trial and error, office helppage, tweakers database nagezocht, boeken gehaald bij de bieb. Dit bracht mij tot de Functie Groupby en totaal berekenen met de opdracht Som.

Wat heb ik gemaakt: een database gemaakt voor de klantgegevens van een dierentuin (lees abonnementen van tijdschriften, contributies en donaties.)

Wat is de opbouw van het access bestand: de bedoeling is om op basis van 4 gegeven tabellen gegevens te generen met behulp van queries.

Waar loop ik tegenaan: de query te ontvangen contributie werkt niet. Deze querie bevat twee velden namelijk donateursnummer en bedrag. Alle bedragen die vermeld worden moeten opgeteld worden.Nu is mij gewezen op de functie groupby achteraf bleek het niet echt nuttig want mijn probleem is nog steeds niet opgelost.

Wat gebeurt er: mijn bedragen worden verticaal niet opgeteld bij het inschakelen van deze functie. En dat is juist wat ik wil.

Hoop deze keer een duidelijkere omschrijving te hebben gegeven.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Post je query dan eens en een voorbeeldje van de (gewenste) output?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Ik heb twee screenshots.
Moeten eerst gedownload worden
http://www.zyload.nl/36089 Dit is de ontwerpweergave (ontwerp.jpg)
http://www.zyload.nl/244495 Dit is de gegevensblad weergave (gegevens.jpg)

  • PromoX
  • Registratie: Februari 2002
  • Laatst online: 24-07 09:39

PromoX

Flying solo

Wat de group by functie nu doet is alle bedragen van een debiteur bij elkaar optellen. Wat jij wilt (zoals weergegeven in afbeelding gegevens.jpg) kan niet met een query. Hiervoor zou een rapport/formulier voor moeten gebruiken.

offtopic:
Voor het uploaden van afbeeldingen kun je overigens in het vervolg beter gebruikmaken van http://imageshack.us/ oid en dan een directe link plaatsen naar de afbeelding.

And I'm the only one and I walk alone.


  • jwpmzijl
  • Registratie: December 2002
  • Laatst online: 21-06 09:07
PromoX schreef op donderdag 01 februari 2007 @ 19:42:
Wat de group by functie nu doet is alle bedragen van een debiteur bij elkaar optellen. Wat jij wilt (zoals weergegeven in afbeelding gegevens.jpg) kan niet met een query. Hiervoor zou een rapport/formulier voor moeten gebruiken.
Het kan wel in een query maar dan moet je SQL met UNION ALL statements gaan gebruiken maar dat gaat waarschijnlijk iets te ver >:)

Hans van Zijl


Verwijderd

Topicstarter
Heren,
Het probleem heeft zichzelf opgelost.
Ik dacht veel te moeilijk
Het betrof gewoon een aantal velden toevoegen in de query.
Allereerst met de functie Groupby (aantal) Achternamen dan krijg je alleen getallen die je op hun beurt weer kunt vermeningvuldigen met de bedragen, zo krijg je totalen. Nu alleen de totalen optellen. Dan is de klus geklaard. Het enige nadeel, en verbeter me als het niet waar is, is dat je alleen horizontale berekeningen kunt uitvoeren en geen verticale berekeningen.
groetjes,
Coen

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 16:36

Dido

heforshe

Het is me volslagen onduidelijk wat je nu wilt. Gewoon het totaal van de bedragen in je tweede screenschot? Dan kun je donateurnummer weglaten uit je query.

Totaal per donateur? Dat heb je al.

Horizontaal en vertikaal rekenen? Denk in records, en formuleer dan duidelijk wat je wilt. :)

Wat betekent mijn avatar?


Verwijderd

Topicstarter
Moeilijk om dat duidelijk te formuleren
Afbeeldingslocatie: http://img407.imageshack.us/img407/395/teontvangenso0.th.jpg

Afbeeldingslocatie: http://img365.imageshack.us/img365/6227/teontvangen2gi9.th.jpg

De laatste afbeeling staan twee bedragen die ik nog moet ontvangen.
Ik moet deze nu nog zien op te tellen.

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 16:36

Dido

heforshe

Als je die twee opgeteld wilt hebben, laat je toch gewoon de achternaam weg :?

Dan heb je je totaalbedrag.

Je kunt niet zowel de detailregels als de totaalregel uit 1 query halen, en ik krijg het idee dat dat is wat je wilt.

In een query haal je rijen van gelijksoortige informatie op, en detail- en totaalinformatie is geen gelijksoortige informatie.

Wat betekent mijn avatar?


Verwijderd

Topicstarter
Als ik de achternaam weghaal, dan berekent de query ook geen bedragen meer.
Dus dat werkt niet.
Ik dacht zelf aan de functie Dcount, maar die is best ingewikkeld.
Ik ben bang dat ik nu weer vastloop.

De achternaam is gekoppeld aan een donateurstype (3!) dus in feite kan ik 3 bedragen krijgen van het aantal mensen dat niet heeft betaald.

EDIT: dus achternaam -- donateurstype -- bedrag -- betaald voor 2006
zijn allemaal waarden die afhankelijk zijn van elkaar. Nu kan ik proberen om achternaam weg te laten en alleen de laatste drie hun werk te laten doen. Maar dan blijft het feit dat ik drie bedragen krijg.

[ Voor 50% gewijzigd door Verwijderd op 06-02-2007 13:00 ]


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 16:36

Dido

heforshe

Dan laat je donateurstype dus ook weg (in je output - wat is die wizzard toch een onding).
Waarom zet je die erin als je hem niet wilt :?

Als je specifieke donateurstypen wilt:

Je selecteert dus donateurstype IN (1, 2, 3) en je vinkt het vinkje uit bij "tonen".

Een tip: SQL is niet zo eng als het lijkt, kijk daar eens naar. Wat je wilt is in SQL heel simpel:
code:
1
2
3
4
SELECT SUM(bedrag)
FROM tabel
WHERE donateurstype IN (1, 2, 3)
AND Betaald = false


offtopic:
Sinds wanneer voegt de code tag onnodige lege regels toe :?

[ Voor 17% gewijzigd door Dido op 06-02-2007 13:11 ]

Wat betekent mijn avatar?


Verwijderd

Topicstarter
Dit is het resultaat.
  1. SELECT Sum(DONATIE.bedrag) AS SomVanbedrag, donateurslijst.[betaald voor 2006]
  2. FROM DONATIE INNER JOIN donateurslijst ON DONATIE.donateurstype = donateurslijst.donateurstype WHERE donateurstype IN (1, 2, 3)
  3. GROUP BY donateurslijst.[betaald voor 2006]
  4. HAVING (((donateurslijst.[betaald voor 2006])=False));
Maar dan krijg ik een foutmelding, dat donateurstype naar meer dan een tabel kan verwijzen in de component FROM van uw SQL instructie. De help optie geeft weer dat ik dan de tabel meer moet specificeren. Maar naar mijn idee is dat toch al gedaan?

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 16:36

Dido

heforshe

Wat wil je nu? Het totaal over alle donateurs en donateurstypen heen? Dan heb je geen join nodig, en die where op donateurstype ook niet.

Een group by is dan ook niet zinnig, je "betaald" hoef je ook niet in je select op te nemen.

Dus nogmaals: wat wil je hebben?

- Het totaal aan nog te ontvangen bedragen
of
- Het totaal aan nog te ontvangen bedragen per donateurstype
of
- Het totaal aan nog te ontvangen bedragen per donateur
of
- Het totaal aan nog te ontvangen bedragen per donateurstype en per donateur
of
- nog iets anders.

Je kunt het moeilijk vinden het onder woorden te brengen, maar toch is dat noodzakelijk: als je dat niet kunt krijg je ook nooit het resultaat dat je wilt.

Wat betekent mijn avatar?


Verwijderd

Topicstarter
sorry,
Het totaal te ontvangen bedragen. Dat is het enige wat ik nodig heb.
Ik maak het mezelf te moeilijk, ik heb het zo gedaan.
  1. Betaald voor 2006 (onwaar)
  2. Bedrag Groupby en dan som
Krijg ik 1 getal. 430 euro. Te ontvangen. Sorry dat ik zo onduidelijk was, ik denk waarschijnlijk te moeilijk voor dit soort simpele dingen. In ieder geval hartelijk bedankt voor je hulp!!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 16:36

Dido

heforshe

Je hebt niet eens een groupby nodig, sterker nog som en groupby op hetzelfde veld kan niet, mag niet en mag niet mogen.

Je zoekt dus gewoon het volgende:
code:
1
2
3
SELECT sum(bedrag)
FROM tabel
WHERE belaatd=false

iedere andere uitbreiding is onnodig :)

Wat betekent mijn avatar?

Pagina: 1