Ga naar inhoud
  • 0

Count records mits voldaan aan meerdere voorwaarden


Marco H.

Vraag

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]

Link naar reactie

8 antwoorden op deze vraag

Aanbevolen berichten

  • 0

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

Link naar reactie
  • 0

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.

Link naar reactie
  • 0

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

Link naar reactie
  • 0

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

Link naar reactie
  • 0

@ 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

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...