Belminuten per telefoonnummer optellen

Status
Niet open voor verdere reacties.

Deadcops

Gebruiker
Lid geworden
8 feb 2008
Berichten
205
Hallo,

Ik ben een database aan het maken waarin de belgegevens van mensen moeten komen te staan. Deze belgegevens moeten worden opgeteld per nummer, per maand, wat het gekost heeft.
Dus als je bijvoorbeeld de volgende gegevens hebt:
Telefoonnummer: 0666666666
Minuten gebeld: 17

Telefoonnummer: 0666666666
Minuten gebeld: 19

Telefoonnummer: 0777777777
Minuten gebeld: 10

Nu wil ik dat alle minuten van ieder nummer opgetelt worden.
Is dit mogelijk?
 
Je kunt een query maken op basis van de tabel met de belgegevens, en met de knop Totalen groeperen op telefoonnummer. Voor het veld Belminuten gebruik je dan de functie Som.
Eventueel kun je ook nog groeperen op een datumveld, om bijvoorbeeld en maandoverzicht te krijgen.
 
waarom het wiel opnieuw uitvinden.
Bij elke provider kun je via het internet de gegevens opvragen.
Per nummer weet je het belgedrag.
Per nummer kun je dan zelfs nog zien welke nummers er gebeld zijn.
 
Omdat ze willen zien hoeveel een afdeling gebeld heeft en hoeveel er met 1 nummer gebeld is.
Zoals wij de gegevens krijgen zie je wel waar naartoe en hoelang iemand gebeld heeft maar niet hoeveel hij/zij die maand gebeld heeft.

En dat is juist wat ze willen zien.
 
Heb je al geprobeerd om de query te maken?
En zo ja, doet-ie het, of loop je tegen problemen aan?
 
Sorry,

Ik weet hoe je de telefoonnummers kun groeperen met de GROUP BY functie,
maar ik weet niet hoe ik ervoor kan zorgen dat de belminuten en kosten dan op kan laten tellen voor dat telefoonnummer.

Ik ben zelf best wel nieuw in access/sql.
 
Als je de optie <Group By> al weet te vinden, dan weet je dus hoe de knop Totalen werkt. Standaard zet Access elk veld op <Group By> als je op deze knop klikt. De Regel met <Group By> bevat echter meer functies, waaronder <Aantal>, <Som>, <Eerste> etc. Om getallen op te tellen voor een groep, zet je de functie op <Som>.
Let hierbij wel op, dat je een totaal krijgt voor elke unieke combinatie die je met Group By maakt. Als je alleen groepeert op Telefoonnummer, en de rest op Som, Aantal, Eerste etc. zet, krijg je één record met totalen voor de velden waarbij je Som hebt opgegeven. Als je ook groepeert op een Datumveld, dan krijg je meer records, omdat je dan twee velden hebt, waarvoor dan wel weer geldt dat de combinatie van die twee velden één keer voorkomt. Dus: hoe meer velden je groepeert, hoe groter het aantal records.
 
Okee Okee,

Dankjewel

Ik ben het nu even aan het testen en het ziet er nog veel belovend uit.

Alvast bedankt
 
Okee het werk goed,

Nog 1 vraagje gebaseerd op iets anders wat ik gedaan heb:

Ik heb er een totaal per maand van gemaakt door middel van de volgende code in citeria:
Like "*-"& [Kies een maand uit]& "-*"

Dit werkt ook goed. Maar nu wil ik er een totaal per afdeling van maken.
Hiervoor heb ik een relatie tussen 3 tabellen:
Persoonsgegevens (Afdeling)
Simkaartgegevens (Link tussen de 2 tabellen)
Belgegevens (voor de belgegevens)

Hierbij komt er eigenlijk alleen een kolom Afdeling bij.
Als ik de afdeling doe groeperen en de datum weglaat dan telt hij mij alles op voor de afdeling voor iedere maand. Als ik afdeling weglaat en Datum erinzet met de volgende criteria:
Like "*-"& [Kies een maand uit]& "-*"

Laat hij mij alle gegevens van de maand die ik invul opgeteld zien.
Zet ik nu afdeling en datum erin krijg ik de volgende foutmelding:
You tried to execute a query that doesn't include the specified expression "datum"as a part of a aggregate function.

Is hier een oplossing voor of kan dit gewoon niet?

Dankjewel
 
Kun je de volledige SQL code posten? Het moet namelijk wel kunnen, maar ik wil dan wel de hele query kunnen beoordelen.
 
Okee dit is de code:

SELECT Persoonsgegevens.Afdeling, Sum(Belgegevens.Tijdsduur) AS [Totale Tijdsduur], Sum(Belgegevens.Kosten) AS [Totale Kosten], Sum(Belgegevens.[Volume up]) AS [Totaal Volume up], Sum(Belgegevens.[Volume down]) AS [Totaal Volume down]
FROM (Persoonsgegevens INNER JOIN Simkaartgegevens ON Persoonsgegevens.[Persoon ID] = Simkaartgegevens.[Persoon ID]) INNER JOIN Belgegevens ON Simkaartgegevens.Telefoonnnummer = Belgegevens.Telefoonnummer
GROUP BY Persoonsgegevens.Afdeling
HAVING (((Belgegevens.Datum) Like "*-" & [Kies een maand waarvan je de totale belgegevens wilt zien (1 - 12)] & "-*"));


Ik heb deze gemaakt in de design view van Access.
 
Ik zou de filterconstructie zowiezo heel anders doen:

SELECT Persoonsgegevens.Afdeling , Sum(Belgegevens.Tijdsduur) AS [Totale Tijdsduur], Sum(Belgegevens.Kosten) AS [Totale Kosten], Sum(Belgegevens.[Volume up]) AS [Totaal Volume up], Sum(Belgegevens.[Volume down]) AS [Totaal Volume down]
FROM Persoonsgegevens, Simkaartgegevens, Belgegevens
GROUP BY Persoonsgegevens.Afdeling
HAVING (Month([Datum])=[Kies een maand waarvan je de totale belgegevens wilt zien (1 - 12)]);
De reden? Jouw filtering is niet geheel zonder risico, omdat je niet altijd op een maand filtert; het gevraagde getal kan op verschillende plaatsen in de datum voorkomen, en dat wil je natuurlijk niet.
 
Ik dacht dat dit opgelost was met de volgende:
"*-"& [Kies een maand uit]& "-*"

de "*-" en de "-*" zeggen toch dat er *-(Maandnummer)-* moet staan of klopt mijn redenering niet?

Maar ik zal jou code straks uit proberen.

Alvast bedankt
 
Door het *-teken kan de zoektest overal staan in je code. Bovendien vertraagt het de werking van je query. door met Month([datum] te werken, zit je altijd goed. Bovendien kun je door er een regel Year([Datum]) naast te zetten nog op het huidige jaar filteren ook. Het criterium wordt dan: Year(Date())
 
Het werkt.

Dan is dit het laaste wat ik vraag en dan sluit ik hem.

Kun je de uitkomst van Month([Datum]) ook in het formaat Jun/Jul/Dec enz. krijgen.

Ik heb het al geprobeerd met het formaat van datum te veranderen in medium date (12-jun-09) en met het formaat van de Month op medium date te zetten.
 
Dat kan niet op het veld Month([Datum]), omdat daar altijd een getal uitkomt. Zodra je dat veld de opmaak Jan/Feb etc geeft, maakt hij van het maandgetal eerst een datum vanaf 1-1-1900, dus dat schiet niet echt op. Wel kun je dit veld er naast zetten: Format([Datum];"mmm"). Dan zet je de optie Zichtbaar voor het veld Month([Datum]) uit, want dat heb je verder niet nodig. Zelf gebruik ik het veld Month([Datum]) òf om te filteren op een maand, òf om de maanden netjes te sorteren als je bijvoorbeeld een jaaroverzicht maakt. Je wilt een jaar tenslotte niet laten beginnen met April...
 
Okee dat heeft dus geen zin.

De bedoeling was dat men Apr/mei enz. in konden vullen om dat sotering te kunnen maken. En nu moeten ze gaan rekenen welke maand het nu is dat ze willen hebben.

Verder maakt het eigenlijk dus niet uit. Toch bedankt voor de moeite :):thumb:
 
Als je maanden wilt kunnen gebruiken als selectie-criterium, zou je er een tabelletje achter kunnen hangen met de waarden van de 12 maanden, en de namen. Die kun je dan aan de query koppelen als selectiecriterium. Overigens is 3-6 sneller typen als "mrt-jun". Nog afgezien van het feit dat niet iedereen uit z'n hoofd weet hoe de maanden worden afgekort.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan