16. maj 2001 - 10:29Der er
8 kommentarer og 1 løsning
Løbende sum i forespørgsel
Hvordan laver man en løbende sum i en forespørgsel? Der findes en nem funktion under rapporter, men det må da også kunne lade sig gøre i en forespørgsel. F.eks hvis første kolonne indeholder 1,2,3,4 hvordan beregnes i næste kolonne: 1,3,6,10?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Thats a good one marcus25! I think the only way this can be done is by calling a function from your query and calculating the løbende sum. I would think it necessary that you call the function with the current records ID if thats possible so you know where you have come to. Then the function can calculate the sum up to that ID.
Thanks, that is probably one way too do it. But I don\'t take that for an answer. There must someone who knows an easier way to do it, or is able to give me a clue for writing te function?
Hi marcus25 Didnt expect you would, but we are talking about an hour or more work. So for 60 points I came with an idea only. The idea I suggested will be about the only way you can solve the problem. If there is an easier way then I too will learn something!
You can send me your dB and I will get you started. I will also include comments so that you can see what the idea is. Hows that?
Så vidt jeg kan se, kan du lave de udregninger du ønsker ved at bruge \"Generer-knappen\" i værktøjslinien - (selvfølgelig samtidig med at du er i gang med at lave en forespørgsel) Du skal lave udregningerne i den første ledige kolonne i din forespørgsel.
Mogens, its more than likely possible to use the \"Generer-knappen\", but the problem is calculating the \"løbene sum\".
Its a case of summing up the records preceding records value for each record. Thats why I suggested a function where things are a little more flexible.
Hvis jeg skulle lave funktionene, så ville jeg nok lave den således:
Public Function LøbendeSum(Værdi As Single, Optional Reset As Boolean) As Single Static tmpVærdi As Single If Reset Then tmpVærdi = 0 tmpVærdi = Værdi + tmpVærdi LøbendeSum = tmpVærdi End Function
Herefter kan jeg så bruge den i min forespørgsel således: LøbendeSum: LøbendeSum([Antal];IIf([Varenr]=DFirst(\"[Varenr]\";\"Tabelnavn\");True;False))
hvor [Værdi] er det felt, der skal summeres og [Nøglefelt] er (som navnet lidt antyder) nøglefeltet i tabellen.
Grunden til at nøglefeltet skal med, er at funktionen benytter en Static variabel, som skal nulstilles hver gang forespørgslen køres. Derfor checker jeg om vi står på den første post.
Forespørgslen vil ikke være særlig hurtig, hvis der er mange data i, men er nok svært at komme uden om.
NB: Det kræves at forespørgslen sorteres på nøglefeltet!
Der havde lige sneget sig en mindre skrivefejl ind. Dette er det rigtige svar:
Hvis jeg skulle lave funktionene, så ville jeg nok lave den således:
Public Function LøbendeSum(Værdi As Single, Optional Reset As Boolean) As Single Static tmpVærdi As Single If Reset Then tmpVærdi = 0 tmpVærdi = Værdi + tmpVærdi LøbendeSum = tmpVærdi End Function
Herefter kan jeg så bruge den i min forespørgsel således: LøbendeSum: LøbendeSum([Værdi];IIf([Nøglefelt]=DFirst(\"[Nøglefelt]\";\"Tabelnavn\");True;False))
hvor [Værdi] er det felt, der skal summeres og [Nøglefelt] er (som navnet lidt antyder) nøglefeltet i tabellen.
Grunden til at nøglefeltet skal med, er at funktionen benytter en Static variabel, som skal nulstilles hver gang forespørgslen køres. Derfor checker jeg om vi står på den første post.
Forespørgslen vil ikke være særlig hurtig, hvis der er mange data i, men er nok svært at komme uden om.
NB: Det kræves at forespørgslen sorteres på nøglefeltet!
Tusind tak for de mange gode svar! Thomas, det virker simpelthen fortræffeligt!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.