group by of toch anders

Status
Niet open voor verdere reacties.

Henneke50

Gebruiker
Lid geworden
17 aug 2021
Berichten
27
Ik zit te knoeien met het volgende:

Ik heb een MS Access database met daarin een aantal tabellen, o.a. Klanten, Leveranciers, Opdrachten. Nu zou ik graag per leverancier willen weten hoeveel opdrachten door hoeveel klanten.

Bijv. ik heb in de Tabel Opdrachten 25 records door 3 leveranciers en 6 klanten
Als ik Group by / Aantal gebruik, dan krijg ik bijv. wel het aantal opdrachten per leverancier, maar niet door hoeveel klanten. Ik krijg wel de klanten op naam uitgesplitst met daarachter het aantal per klant. (maar dus niet het aantal verschillende klanten dat een opdracht heeft.

Ik zou willen zien:

LeveranciersAantal opdrachten(van) aantal klanten
Leverancier 141
Leverancier 2155
Leverancier 362

Heeft iemand een idee hoe ik dat op kan lossen?
Henneke
 
Post er eens een voorbeeldje bij, want dit is een hele lastige om in één query te doen. Een Totalen query kijkt naar de totalen waarop je groepeert. Daarbij heb je één of meer velden als groeperingsveld (Leverancier in jouw geval) en dan totaliseer je dus op één van de overige velden in de query. Die leveren in beginsel allemaal hetzelfde getal op, omdat je kijkt naar het aantal keer dat het veld op basis van het groeperingsveld voorkomt. Een veld als Tussenvoegsel is dus niet geschikt om te tellen, omdat dat nu eenmaal niet bij iedereen gevuld is. Maar een OpdrachtID is altijd gevuld, en een KlantID ook. Je krijgt dus altijd in die twee kolommen, als je die zou toevoegen, dezelfde waarden te zien. En dat betekent dus dat je een nogal ingewikkelde constructie moet gebruiken als het met één query moet. Met meerdere queries is het wat simpeler.
 
Ik heb even een voorbeeldje gemaakt op basis van Noordenwind. Daarbij eerst een Totalen query die de hoeveelheid opdrachten per klant berekent, en daarna een Totalen query die de opdrachten per leverancier en klant laat zien.

PHP:
SELECT Leveranciers.Bedrijf AS Leverancier, Orders.[Klant-id], Count(Orders.[Order-id]) AS [Aantal opdrachten]
FROM (Leveranciers INNER JOIN Producten ON Leveranciers.Id = Producten.[Leverancier-id's].Value) 
INNER JOIN ((Klanten INNER JOIN Orders ON Klanten.Id = Orders.[Klant-id]) 
INNER JOIN [Detailgegevens orders] ON Orders.[Order-id] = [Detailgegevens orders].[Order-id]) 
ON Producten.Id = [Detailgegevens orders].[Product-id]
GROUP BY Leveranciers.Bedrijf, Orders.[Klant-id]
ORDER BY Leveranciers.Bedrijf, Orders.[Klant-id];

PHP:
SELECT Leverancier, Count(Orders.[Klant-id]) AS Klanten, Sum([Aantal opdrachten]) AS [Aantal opdrachten] FROM [qOrders per Leverancier per Klant] GROUP BY Leverancier;

Noordenwind heeft een beetje rare structuur voor de orders (vind ik tenminste) dus je startquery is ingewikkelder dan strikt noodzakelijk. Maar het werkt :).

Code:
Leverancier	Aantal opdrachten	Klanten
Leverancier A	9	6
Leverancier B	12	6
Leverancier C	9	7
Leverancier D	10	7
Leverancier E	2	2
Leverancier F	9	7
Leverancier G	3	3
Leverancier H	4	4
Leverancier J	9	7
 
Hi, zag het bericht net. Ik ga het morgen even uitproberen. Mijn tabellen heten ook anders dan ik genoemd heb, maar mijn gestuurde voorbeeld leek me leesbaarder dan de namen van mijn tabellen te gebruiken.
Als ik het sql-statement zo lees, dan lijkt het allemaal logisch en had ik het zelf moeten kunnen. Laat morgen nog weten of het allemaal gelukt is, of waar ik nog tegenaan loop.
 
OctaFish.

Hartelijk dank voor de hulp. Het is geluk met jouw hulp.Ik was helaas door persoonlijke omstandigheden niet in staat eerder te reageren.

Henneke
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan