Jump to content
  • 0

Count records mits voldaan aan meerdere voorwaarden


Marco H.

Question

Posted

Ik heb 1 tabel waarin ik de status van projecten bijhoudt. Hierin worden o.a. de volgende velden gebruikt;

 

- jaar

- status, het veld status kent 3 vaste waardes

- bedrag

 

Ik wil het aantal records tellen dat per jaar per status aanwezig is. Zoiets als onderstaand waarbij de getallen het aantal keren is dat de records voorkomen mits ze voldoen aan beide criteria:

 

Jaar w1 w2 w3

2008 1 6 4

2009 3 4 9

2010 6 3 5

et cetera.

 

De optie met een selfjoin een globaal veld en de Count functie ben ik in verschillende draadjes tegengekomen. Alleen niet met meerdere voorwaarden.

 

Ik kan wel met een case & subresume een telling maken van het bedrag [per jaar per waarde]. Maar ik kan dit niet gebruiken om het aantal records te tellen?! Waarom oh waarom, het lijkt deze leek zo logisch... :-) [en sneller dan de selfjoin optie bovendien]

8 answers to this question

Recommended Posts

  • 0
Posted

Hier een voorbeeld welke op drie manieren laat zien dat je dit wel degelijk met een selfjoin kan oplossen.

 

Het is van belang dat je je database goed normaliseerd. Ik heb als voorbeeld de jaren in een apart tabel gezet zodat je kan zien wat het effect is op de weergave. Bekijk alle 3 de layouts eens in het bijgevoegde voorbeeld.

 

Dit is overigens geen uitputtend voorbeeld. Er zijn nog legio andere weergaven mogelijk. Ook met portalen e.d.

StatusPJ.fp7

  • 0
Posted

Dank Eroos!

 

De door jou getoonde oplossingen zijn mij duidelijk, dank daarvoor. Maar ik zou ook graag willen begrijpen waarom mijn gedachtespoor niet juist is.

 

Ik heb in deze zelfde tabel met een case & resume een – in mijn ogen – vergelijkbaar resultaat gehaald.

 

Ik gebruik een calculatieveld:

Case( pr_jaar = "2008" and pr_type = "acquisitie" ; pr_budget ; 0 )

 

En vervolgens een resume veld:

= Totaal van Calculatieveld

 

Met mijn lekenlogica dacht ik dus het met een kleine aanpassing in een calculatieveld het aantal voorkomende records te kunnen berekenen;

COUNT( pr_jaar = "2008" and pr_type = "acquisitie" ; pr_ID ; 0 )

 

Dat werkt dus niet. En ik wil graag begrijpen waarom niet.

  • 0
Posted

Laten we zeggen dat je je wensen voor waar hebt genomen waar je je lekenlogica had moeten toepassen :

 

Case( pr_jaar = "2008" and pr_type = "acquisitie" ; 1 ; 0 )

 

En vervolgens een resume veld:

= Count van Calculatieveld

  • 0
Posted

In vervolg op dit onderwerp wil ik de volgende vraag stellen:

 

Kun je met deze relaties ook een bereik tonen?

M.a.w. is het mogelijk om bijvoorbeeld de opgetelde waardes te tonen van alle jaren na 2007 door de 'operator' van de relatie (heet dat zo eigenlijk, ik bedoel het '=' teken) te veranderen in een '<' of '>' teken.

Ik heb geëxperimenteerd met het voorbeeld van Eroos, maar dat leidt niet tot het verwachte resultaat.

Als je bijv. het '>' teken gebruikt, dan zou ik verwachten dat alle w1 waardes bij elkaar worden geteld, alle w2 en alle w3. Maar dat is dus niet het geval. Verander ik het jaar 2008 in 2007 dan zou ik denken dat ik de waardes van 2008+2009+2010 te zien zou krijgen. Niet dus.

 

Ongetwijfeld zit er een fout in mijn redenatie, maar ik zie niet in welke, vandaar dat ik mij tot jullie wend, (al)wetende FM-ers.

 

Groet,

Corneel

  • 0
Posted
Ongetwijfeld zit er een fout in mijn redenatie, maar ik zie niet in welke

 

volgens mij klopt je redenatie wel maar is het veld ‘jaar’ in beide tabellen een tekstveld en ‘>’ werkt dan niet... oplossing: maak van beide jaar-velden een getalveld.

 

groet, bdk

  • 0
Posted

Voortbordurend op het voorbeeld van Eroos wil ik graag een optelling zien van de jaren voorafgaand aan een jaar. Dus bijv. een optelling van alle w1, w2 en w3's van voor 2010. Daartoe heb ik de operator van de relatie veranderd in '>' Als controle heb ik voor elke w een portal gemaakt. Daaruit blijkt dat de operator goed zijn werk doet.

Maar nu wil ik graag dat de optelling ook nog klopt. En daar zit 'm de kneep. Voorzover mijn kennis reikt heb ik alle scenario's gehad, maar - jullie begrijpen het - zonder het gewenste resultaat.

 

Wat doe ik fout? Wie heeft er een idee of de oplossing?

Als bijlage stuur ik mijn bewerking van Eroos' opzet mee.

 

Groet,

Corneel

StatusPJ-1.fp7

  • 0
Posted

@ Eroos

 

Dit is precies wat ik bedoel. Super Eroos!

Ook in mijn eigen toepassing werkt het perfect. Dank je wel!

 

Maar ik snap werkelijk niet de logica die hierachter schuil moet gaan.

Je maakt een telling van een globaal veld in een TO die door ditzelfde globale veld in een ander, hiërarchisch hoger gelegen, TO wordt gebruikt om het veld 'status' te sturen. Een raadsel voor mij! Is er een eenvoudige uitleg om mij de logica ervan te doen inzien?

 

Groet,

Corneel

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...