SQL query MS Access

Status
Niet open voor verdere reacties.

ronmarac

Nieuwe gebruiker
Lid geworden
12 aug 2014
Berichten
3
Beste forumleden. Het lijkt zo een simple vraag. Ik heb een tabel. Ik wil een query die als resultaat alle klanten nr geeft
die zowel product 101, 102, 103 hebben. Het resultaat zou alleen klant 1 mogen zijn. Dus op op groepsniveau (klant) een combinatie kunnen opgeven van Product.

Klant, Product
1 ,101
1 ,102
1 ,103
1 ,104
2 ,102
3 ,101
3 ,102


Wie oh wie, alvast heel erg bedank voor het meedenken.

Ron
 
Dat is een simpele query, waarin je de velden KlantID en ProductID zet, groepeert op KlantID en ProductID en een WAAR veld toevoegt voor ProductID waarin je 101 AND 102 AND 103 typt als criterium.
 
Laatst bewerkt:
Dat is een simpele query, waarin je de velden KlantID en ProductID zet, groepeert op KlantID en ProductID en een WAAR veld toevoegt voor ProductID waarin je 101 AND 102 AND 103 typt als criterium.

Helaas dat werkt niet want dan krijg je ook klant nr 2 en 3, en die wil ik niet. Alleen Klant Nr's die alle product nr (101 102 103) hebben.
 
Dat kan bijvoorbeeld als volgt. Je neemt de basistabel 3x in het query-ontwerp op en legt dan relaties tussen de klant. Bij de relaties moet zijn ingesteld dat alleen de records worden weergegeven waarbij de waarden uit beide gekoppelde tabellen identiek zijn. Uit elke tabel kies je dan het product, waarbij je bij criteria respectievelijk aangeeft 101, 102 en 103. Op bijgaand plaatje is te zien hoe de query er dan uitziet in ontwerpweergave.
 

Bijlagen

  • query.png
    query.png
    9,3 KB · Weergaven: 28
Laatst bewerkt:
Waarom niet gewoon in een query met één tabel?
Code:
SELECT DISTINCT Klant
FROM Blad1
WHERE ((Klant 
     In (select klant from blad1 where Product=101) 
     And Klant In (select klant from blad1 where Product=102) 
     And Klant In (select klant from blad1 where Product=103)));
 
Laatst bewerkt:
Beste OctaFish,

Super bedankt voor het meedenken over de oplossing. Deze komt al in de buurt van wat ik zou willen. Echter zoek een methode om hier een vast query (of stored procedure) van te maken waarbij ik de Product Nr als input variabelen kan meegeven. Het moet dus mogelijk zijn zonder de where in select
aan te passen of uit te breiden. Dit omdat ik van te voren niet weet of ik op 1 2 3 of 4 Product combinaties wil zoeken. Oplossing mag ook in
Transact SQL. Kan het niet met EXIST of Row over partions. Mijn SQL gaat nog niet zover dat ik dit even oplos. Het lijkt zo'n simpele vraag.


SELECT DISTINCT Klant
FROM Blad1
WHERE ((Klant
In (select klant from blad1 where Product=101)
And Klant In (select klant from blad1 where Product=102)
And Klant In (select klant from blad1 where Product=103)));
 
Zit je wel in het goede forum?

Echter zoek een methode om hier een vast query (of stored procedure) van te maken waarbij ik de Product Nr als input variabelen kan meegeven.
...
Oplossing mag ook in Transact SQL. Kan het niet met EXIST of Row over partions.
Access kent geen stored procedures (=SQL server) en ook geen Transact SQL. Om over 'Row over partions' maar te zwijgen...

Overigens helpt het als je een duidelijke vraag stelt. Je vroeg specifiek om producten met een vaste productcode, maar nu verander je de vraag naar niet alleen flexibele producten, maar ook nog eens naar een variabel aantal! Dan kom je uiteraard bij een hele andere oplossing uit, en als ik dat op voorhand weet, dan steek ik natuurlijk geen (ook voor mij kostbare) tijd in een oplossing waar je uiteindelijk niks aan hebt.
Je werkt (uiteraard) met formulieren waarop je met een keuzelijst de producten laat kiezen, en op basis daarvan kun je makkelijk een dynamische SQL samenstellen. Die er dan wel uitziet zoals mijn voorbeeldje... Want dat is nu eenmaal het resultaat dat je nodig hebt in de query. De oplossing van rebmog valt dan natuurlijk gelijk af, omdat je dan nauwelijks dynamisch kunt werken. Ook zijn tijd was dus verspilde moeite.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan