Kolom waarde optellen

Status
Niet open voor verdere reacties.

Deadcops

Gebruiker
Lid geworden
8 feb 2008
Berichten
205
Hallo,

Ik ben bezig met een database voor mobiele telefoons.
Hierbij hebben de mensen A of B abonnementen.
Via de look-up wizard heb ik gezegt dat je alleen maar een A of B in deze kolom mag zetten.

Nu wil ik weten hoeveel mensen er een A abonnement hebben en hoeveel een B abonnement. Ik dacht dat dit met een querry moest dus ben ik gaan proberen om een querry te maken die deze gegevens voor mij uit kan zoeken.
Ald de querry werkt kan ik deze gegeven in een rapport zetten.

Ik ben met de querry zo ver gekomen dat hij telt hoeveel kolommen er gevult zijn met een
A of B abonnement. Bijvoorbeeld:
Ik heb 2 X A en 3 X B dan staat er 5
Dat heb ik met deze code gedaan:

SELECT Count("simkaartgegevens.A/B Status") AS ["Status A"]
FROM simkaartgegevens

Als ik hier deze where statement onder zet:

WHERE (((Count("simkaartgegevens.A/B Status"))="A"));

Dan krijg ik de foutmelding:
Cannot have aggregate function in WHERE clause.

Kan iemand mij helpen en ook een beetje uitleggen wat je dan doet?
 
De correcte query ziet er zo uit:

SELECT Count([A/B Status]) AS [Status A]
FROM simkaartgegevens
WHERE ([A/B Status]="A");

Je foutjes zitten hierin:
SELECT Count("simkaartgegevens.A/B Status") AS ["Status A"]

In het kort gezegd: zodra je in een veldnaam een spatie hebt staan, moet je de veldnaam tussen rechte haken zetten. Daarom zie je vaak in een db de naam als A/B_Status, en niet als A/B Status.
 
Het werkt! :)

Hartelijk bedankt. :thumb:

Ik ben nieuw in het SQL scriptje en ik dacht dat je " " moest gebruiken al er een spatie tussen stond zoals in windows, maar dit is dus [ ].
Zo leer je altijd weer iets bij.

Nog 1 vraagje.
Kun je mij ook gemakkelijk vertellen hoe ik in de kolom ernaast het aantal B statussen kan krijgen? :rolleyes:

Dankjewel
 
Dat is een beetje hogeschoolgegoochel, maar je kan dit proberen:

Code:
TRANSFORM Count(simkaartgegevens.[A/B Status]) AS [AantalVanA/B Status]
SELECT 1 AS [A/B Status]
FROM simkaartgegevens
GROUP BY 1
PIVOT simkaartgegevens.[A/B Status];

Het is een zogenaamde Kruistabel, met een paar tweaks om de totalen op één regel te krijgen. Maar zoals je ziet, kan het wel...
 
OctaFish,

Dankjewel :) het werkt perfect.

Zou je misschien wel nog even uit kunnen leggen wat er precies gebeurt?
Ik wil deze code namelijk bij meer querry's kunnen gebruiken.
 
Zal je altijd zien, dat mensen nog willen weten wat er gebeurt....
Haalt wel de magie er een beetje van af ;)

Code:
TRANSFORM Count(simkaarten.[A/B Status]) AS [AantalVanA/B Status]
SELECT "Status" AS [A/B Status]
FROM simkaarten
GROUP BY "Status"
PIVOT simkaarten.[A/B Status];

Ik maak dus in eerste instantie een gewone kruistabel aan, maar het probleem daarbij is, dat je eigenlijk geen goed veld hebt om te groeperen. Je hebt in de tabel één veld, dat je in één rij gegroepeerd wilt hebben. Ik heb in mijn testtabel twee velden staan, één met een naam, en één met de A/B status.
In een kruistabel heb je drie verschillende velden nodig: een Rijkop, een Kolomkop en een waarde. Het waardeveld gebruik je om te tellen, en dat kan in wezen elk gevuld veld zijn. Zolang het maar niet leeg is. Voor de kolomkop gebruik je het A/B Status veld, want je wilt de A en B-tjes naast elkaar in kolommen zien. Dan blijf je dus nog zitten met de rijkop. Als je daar een veld voor neemt uit de tabel, dan worden de uitkomsten gesplitst over verschillende rijen. Dat wil je niet, in dit geval, dus daarom maak ik zelf een veld aan, waarvan ik zeker weet dat er maar één exemplaar van bestaat. In bovenstaand voorbeeld heb ik dat gemaakt met de code "Status" AS [A/B Status]. Doordat deze waarde niet is gekoppeld aan een normaal veld, zal de regel, vanwege de optie Group By, maar één keer verschijnen. Omdat de telling dan over alle records gaat, klopt de uitkomst dus prima!

Je kunt er zelfs nog een totaaltelling bij zetten. De code wordt dan:

Code:
TRANSFORM Count([A/B Status]) AS [AantalVanA/B Status]
SELECT "Status" AS [A/B Status], Count([A/B Status]) AS Totaal
FROM simkaarten
GROUP BY "Status"
PIVOT [A/B Status];
Hopelijk duidelijk genoeg zo?
 
Hartstikke bedankt! :thumb:

En sorry dat ik de magie eraf gehaald heb ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan