per klant het aantal verschillende producten

Status
Niet open voor verdere reacties.

Nietskeoh

Gebruiker
Lid geworden
3 feb 2009
Berichten
63
hallo

Stel: ik heb een 1 tabel met daarin klanten, orders en per order een aantal producten. In de loop der jaren worden allerlei producten in de diverse orders besteld.

Ik wil een query waarin ik in 1 keer kan zien hoeveel verschillende producten een klant ooit heeft besteld. Dus per klant het aantal verschillende producten.
Met "Group by" en "Aantal" kom ik er niet, dank krijg ik het totaal aantal producten dat is besteld door die klanten.
Via 2 queries heb ik een oplossing, maar het kan vast simpeler?

vr.groet
Mark
 
On mogelijk te zeggen zonder de opbouw van je query, maar mogelijk kom je met SELECT DISTINCT een eind?
 
ik heb een 1 tabel met daarin klanten, orders en per order een aantal producten

Heb je werkelijk één tabel
waar alles in staat?

Je zou sowieso een aparte tabel klanten en een aparte tabel producten moeten hebben
en dan nog een tabel orders waarin orderregels komen te staan.

Ken je het begrip 'normaliseren'?
 
Ken je het begrip 'normaliseren'?
Dat heb je wel gehoord, maar nog niet helemaal goed begrepen geloof ik :D Geintje, want je bent er bijna met je opmerkingen. Het zou (minstens) zo moeten zijn:

1. tabel Klanten
2. Tabel Producten
3. Tabel Orders
4. Tabel OrderDetails.

De tabel Klanten is met 1-op-veel gekoppeld aan Orders, Orders is met 1-op-veel gekoppeld aan OrderDetails en Producten is met 1-op-veel ook gekoppeld aan OrderDetails.
 
Ja, ik weet wat normaliseren is. Ik ben een beginner, net een cursus van 2 dagen gehad, nu wat aan het oefenen. Het gaat er om dat er een oude grote database bestaat die we willen gebruiken. Voor dit moment wil ik nog even gebruik maken van de bestaande structuur.

De mogelijke oplossing met SELECT DISTINCT begrijp ik nog niet hoe ik dat zou kunnen toepassen.

Nogmaals de oorspronkelijke vraag. Ik heb even een voorbeeld-tabel toegevoegd, simpel 3 velden tekst en 1 veld numeriek, niet eens een sleutel er op ;).
De uitkomst die ik wil genereren is als die ik heb bijgevoegd. Deze komt dus pas na 2 queries. Hoe kan dat in 1 keer?

alvast dank
 

Bijlagen

  • Tabel1.pdf
    89,4 KB · Weergaven: 44
  • Aantal verschillende producten per klant B.pdf
    87,8 KB · Weergaven: 38
DISTINCT gaat je in dit geval ook niet helpen. Ik zal vanavond eens kijken maar ik geef je op voorhand weinig kans.
 
Is blijkbaar helaas weer een beperking in access, want in SQL werkt dit normaal:

[sql]
SELECT COUNT(DISTINCT product) FROM Table1;
[/sql]
misschien zoiets?
[sql]
SELECT klant, count (product) as aantal
FROM (SELECT DISTINCT klant ,product FROM Table1) GROUP BY klant;
[/sql]
 
Het kan natuurlijk wel met een query als bron i.p.v. een tabel:

PHP:
SELECT tAlias.Klant, Count(tAlias.Product) AS AantalArt
FROM (SELECT Klantenbestand.Klant, Orderdetails.Product, Count(Order.Order) AS Aantal
FROM Klantenbestand INNER JOIN (Order INNER JOIN Orderdetails ON Order.Order = Orderdetails.Order) ON Klantenbestand.KlantId = Order.KlantID
GROUP BY Klantenbestand.Klant, Orderdetails.Product)  AS tAlias
GROUP BY tAlias.Klant;

Ik heb er wel een logische structuur van gemaakt, want ik neem aan dat de klanten in een tabel Klantenbestand staan, de orders in Order en de details in Orderdetails.
Wil je het vanuit één tabel, dan krijg je zoietsS
PHP:
SELECT tAlias.Klant, Count(tAlias.order) AS AantalArt, Sum(tAlias.Totaal) AS TotaalSom
FROM (SELECT Tabel1.klant, Tabel1.order, Count(Tabel1.product) AS Aantal, Sum(Tabel1.aantal) AS Totaal FROM Tabel1 GROUP BY Tabel1.klant, Tabel1.order)  AS tAlias
GROUP BY tAlias.Klant;
 
De SQL:

SELECT klant, count (product) AS aantal
FROM (SELECT DISTINCT klant ,product FROM Table1) GROUP BY klant;

werkt! Ik ben blij :d:)
Tot nu toe werkten we met paradox (voor DOS!), daar had je de simpele functie Calc Count, die het zelfde deed. Wel apart hoor dat het Acces hier geen eenvoudige functie voor heeft.

alle meedenkers bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan