Topwaardes

Status
Niet open voor verdere reacties.

Karen88

Gebruiker
Lid geworden
30 jan 2008
Berichten
64
Dag iedereen,

Ik heb een query gemaakt waarbij ik als instelling van topwaardes "9" heb gezet, ik dacht dat dit werkte, maar als ik het handmatig natel, blijkt dat hij helemaal niet enkel de 9 hoogste waardes eruit haalt.

Mijn tabel is als volgt: Voornaam, Waarde, EGV, Afsprong.

Mijn query is als volgt: Voornaam, Som van "Waarde", Som van "EGV" en Som van "Som van Waarde Som van EGV en Afsprong".
Nu zou ik van Waarde enkel de 9 hoogste waardes uit de tabel mogen hebben, hoe doe ik dit? (Met 9 in te vullen bij topwaardes lukt het niet!

Ik hoop op jullie hulp en alvast bedankt!

Karen.
 
Hallo Karen,

Heb je de sorteervolgorde van het veld waarde in je query op aflopend staan?

Let op als de nummers 10 en 11 dezelfde aantal punten hebben als nummer 9, dan worden deze waardes in de query ook meegenomen.

mvg
Charles
 
Laatst bewerkt:
Maar weet je, als ik de 9 verander in 8, krijg ik nog steeds hetzelfde resultaat, dus begrijp het niet echt goed..

Hopelijk kan je me helpen! Het is vrij belangrijk voor me!

Karen.
 
Hallo Karen,

Heb je de sorteervolgorde van het veld waarde in je query op aflopend staan?

Let op als de nummers 10 en 11 dezelfde aantal punten hebben als nummer 9, dan worden deze waardes in de query ook meegenomen.

mvg
Charles

Dat kan wel zijn, dat 10 en 11 dezelfde aantal punten hebben, kan ik dit uitschakelen, dat de query effectief maar de 9 hoogste neemt? :-S
 
Om de een of andere rede laat "helpmij.nl" het niet toe om de zip-file te openen.

Vriendelijke groet,

Karen.
 
Dat komt omdat ik hem weer verwijderd heb. Ik kijk nog wel even verder.
 
Karen,

Ik vrees dat het met de methode Topwaardes niet gaat lukken. Maar ik denk, dat het wel kan door een methode te gebruiken om de rijen te tellen en die stellen we dan in op <= 9.

Zo krijg je dan in een aflopende lijst de 9 hoogste waardes te zien. Helaas heb ik je database niet meer en al van dit forum verwijderd. Kun je mij de database nog een keer mailen.

Om naar mij te mailen klik je op mijn gebruikersnaam, vervolgens op "Stuur e-mail......."

mvg
Charles
 
Iemand die een oplossing weet? Charles, heb je misschien even tijd om er naar te kijken? Want ik krijg geen reactie meer van je..

Of iemand die me kan helpen? Het is vrij belangrijk, zou het eigenlijk vandaag willen hebben.. Waarschijnlijk gaat dat niet lukken maar toch, ik kan een poging doen om jullie hulp te vragen..

Vriendelijke groeten,

Karen.
 
Opsturen

In mijn eigen projecten werkt de instelling topwaarde wel degelijk. Als je nog hulp nodig hebt, zou je je database misschien op kunnen sturen naar joris@sesamsoftware.nl en aangeven waar het probleem precies zit.
 
Karen,

De reden dat je nog geen antwoord hebt is dat je probleem niet helemaal duidelijk is.
Doe het volgende:
Leg je probleem duidelijk uit, geef hierbij aan aan wat je wilt, gebruik zo min mogelijk technische termen en geef zoveel mogelijk functionele informatie.
Post je mdb even (zippen, niet rarren) en geef aan waar het probleem in je toepassing zit.
 
Mijn probleem:

Ik leg je het voorbeeld uit aan de hand van de gegevens uit: tblBalk, qryStartwaardesBalk, tblKeurgroep en als voorbeeld gebruik ik Sofie(Keurgroep-Id = 7):

(Zie word document om het voorbeeld van Sofie te zien en volg dan de redenering hieronder)

In de query is het dan de bedoeling dat :

Van Sofie (7) de 9 hoogste SWaardes opgeteld worden, samen met de som van EGV en Afsprong.

Dit zou voor Sofie dan Streksprong op (1) + Loopsprong (1) + Pirouette (1) + Rondat (1,5) + Wiel op 1 hand (1) + Koprol zonder handen (1) + Koprol rugwaarts (1) + Hurksprong 1/2 draai (1) + Kattensprong 1/2 draai (1) + Brug rugwaarts (0,5) = 10 (ik selecteerde de 9 hoogste waardes)

+ 4 EGV * 0,5 = 2
+ 1 EGV * 0,3 (van de afsprong) = 0,3
= samen 2,3

+ Afsprong = 0,5

= Totaal: 10 + 2,3 + 0,5 = 12,8

Terwijl de query als resultaat 13,8 geeft, omdat hij streksprong 1/2 draai (=0,5) en wisselsprongetje (=0,5) er ook bijtelt omdat deze zogezegd ook bij de 9 hoogste waardes horen omdat het net zoals de 9e waarde 0,5 waard is en de topwaardes dit dus als gelijk beschouwt en meeneemt in de 9 hoogste waardes.

Lukt het hier beter mee? In bijlage mijn gezipte databank.
 

Bijlagen

Dat krijg je niet opgelost zonder subqueries te gebruiken. Volgens mij zou dit moeten werken, mocht je nog vragen hebben dan hoor ik het wel.

Code:
SELECT Sum(TempSom) AS Totaal
FROM
(
SELECT Sum(Swaarde) AS TempSom
FROM (SELECT top 9 [Balk-Id], Elementen, SWaarde, EGV, Afsprong, [Keurgroep-Id]
FROM tblBalk
WHERE [Keurgroep-Id]=7 ORDER BY SWaarde DESC) AS SwaardeTotaal

UNION

SELECT Sum(EGV) AS TempSom
FROM tblBalk
GROUP BY [Keurgroep-Id]
HAVING [Keurgroep-Id]=7

UNION

SELECT Sum(Afsprong) AS TempSom
FROM tblBalk
GROUP BY [Keurgroep-Id]
HAVING [Keurgroep-Id]=7
) as GrandTotal
Hier komt netjes 12,3 uit
(9,5 + 2,3 + 0,5)
Als je de bovenste regel SELECT Sum(TempSom) AS Totaal aanpast in SELECT TempSom kun je ook de losse subtotalen zien ter controle
 
Laatst bewerkt:
Dubbele waardes

Dit is een mooie oplossing.

Speelt hier alleen nog het fenomeen van de scores die meerdere keren voorkomen, die worden in een top-query allemaal meegenomen, dat kan het resultaat vertroebelen. Daarom moet in de top-subqueries nog wel een unieke volgorde bepaald worden.

Als alternatief kan er een functie geschreven worden die het werk doet, bijvoorbeel iets als:

Function TopWaardes(Tabel As String, Veld As String, Keurgroep As Long, Aantal As Long) As Double
On Error Resume Next
Dim db As Database, rs As Recordset, ts As String, x As Long, tot As Double
ts = "SELECT " & Veld & " FROM " & Tabel & " WHERE [Keurgroep-ID]=" & Keurgroep & " ORDER BY " & Veld & " DESC"
x = 0
Set db = CurrentDb
Set rs = db.OpenRecordset(ts, 4)
While Not rs.EOF
x = x + 1
If x <= Aantal Then tot = tot + Nz(rs(0), 0)
rs.MoveNext
Wend
TopWaardes = tot
End Function

Deze functie kan aangeroepen worden met als parameters de tabel en het veld waarvan de waardes moeten worden opgeteld, de keurgroep-id en het aantal hoogste waardes dat moet worden opgeteld, in dit geval dus 9.
 
Bedankt allemaal! Het blijkt te werken volgens de methode van sesam, dus ik heb deze toegepast! Allemaal enorm fel bedankt voor de moeite!

Greetz,

Karen.
 
Speelt hier alleen nog het fenomeen van de scores die meerdere keren voorkomen, die worden in een top-query allemaal meegenomen, dat kan het resultaat vertroebelen. Daarom moet in de top-subqueries nog wel een unieke volgorde bepaald worden.
Niet dus. Want Ik doe de Select Top op [Balk-Id], Elementen, etc. En aangezien daar een autonummering veld in staat zullen de records allen verschillend zijn.
 
Gezien

Ik zie het nu, ik had de vergissing gemaakt om naar de order by te kijken en daar stond maar 1 veld in. Nu ik het beter bekijk klopt dat natuurlijk ook als er in de select maar meerdere velden staan.

Kan een handiger oplossing zijn als een stukje code, zeker voor mensen die niet zo handig zijn met code schrijven.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan