Inner join Query tussen twee tabellen

Status
Niet open voor verdere reacties.

BjorntobeWild

Gebruiker
Lid geworden
29 aug 2011
Berichten
120
Hallo,


Ik heb in Access een database gemaakt met een aantal tabellen. Nu wil ik voor elk product die hier in de tabel Producten de huidige voorraad weten. Ik heb een tabel Inkoop, Uitgifte en Reserveringen. De huidige voorraad wordt berekend met de formule Sum(Inkoop.[Aantal verpakkingseenheden ingekocht]) - Sum(Uitgifte.[Aantal verkocht]) - Sum(Reservingen.[Aantal gereserveerd]).


Ik ben begonnen met het maken van onderstaande Query


Code:
SELECT Sum(Inkoop.[Aantal verpakkingseenheden ingekocht]) AS [Aantal ingekocht], Sum(Uitgifte.[Aantal verkocht]) AS [Aantal verkocht]
FROM Inkoop INNER JOIN Uitgifte ON Inkoop.Artikelnummer = Uitgifte.Artikelnummer;

Als ik deze query uitvoer komen de totalen niet overeen met wat ik zou verwachten. Ik heb in de tabel Inkoop van het betreffende artikelnummer 15 stuks ingekocht. In de tabel Uitgifte staan 6 stuks verkocht. Het resultaat van de query is in beide gevallen het dubbelen.


Wie kan mij een zetje in de juiste richting geven waar mijn denkfout zit?


Verder wil ik weten of het ook mogelijk is om het artikelnummer weer te geven in de query.


Als resultaat wil ik dus


Artikelnummer aantal ingekocht aantal uitgegeven huidige voorraad.


Alvast bedankt.
 
Maak eens een voorbeeldje met wat dummy data, dat kijkt wat makkelijker.
 
Verder wil ik weten of het ook mogelijk is om het artikelnummer weer te geven in de query.
Je zult sowieso een Totalen query moeten maken, met Group By op Artikelnummer/Artikelnaam, en Sum op [Aantal Ingekocht] en [Aantal verkocht]. Of je systeem handig is weet ik niet, want ik doe mutaties meestal in één tabel, waarbij ik middels Transactietype aangeef of het een Verkoop betreft, Inkoop of Inventaris (om de actuele j(jaarlijkse) voorraadtelling te corrigeren. Er zit doorgaans niet zoveel verschil tussen Inkoop en Verkoop als het gaat om het soort activiteit :).
 
Hoi Octa,

Hier een voorbeeldbestandje. Alvast bedankt voor je input.
 

Bijlagen

  • voorraadbeheer1.zip
    33,1 KB · Weergaven: 29
Oplossing: maak een totalenquery IN met artikelnummer en totaal in
Code:
SELECT Artikelnummer, Sum([Aantal verpakkingseenheden ingekocht]) AS TotaalIN
FROM Inkoop
GROUP BY Artikelnummer;
maak een vergelijkbare totalen query voor de gegevens uit en combineer dan die twee totalen queries op artikelnummer.
 
Beste NoellaG,

Ik had jouw oplossing gisteren ook geprobeerd naar aanleiding van OctaFish zijn tip. Hij laat de totalen voor in- en verkoop dat goed zien.
Voor de voorraad kom ik er nog niet helemaal uit en heb hier onderstaande query voor gemaakt.

Code:
SELECT [Totaal inkoop].Artikelnummer, [Totaal inkoop].[Aantal ingekocht], [Totaal verkoop].[Aantal verkocht], ([Totaal inkoop].[Aantal ingekocht]-[Totaal verkoop].[Aantal verkocht]) AS Voorraad
FROM [Totaal inkoop], [Totaal verkoop]
WHERE (([Totaal inkoop]![Artikelnummer])=[Totaal verkoop]![Artikelnummer]);
Het probleem is hier dat wanneer een artikel waarvan wel is ingekocht, maar nog niets is verkocht, deze niet wordt weergegeven in de totalen. Ik weet alleen niet hoe ik dit op moet lossen (of waar mij denkfout zit) :eek:.
 
Je hebt hier een outer join nodig. Als je een tabel met alle artikelen hebt dan kan je deze tabel met een outer join koppelen naar je totalen query IN en zo toch alle artikels hebben. deze laatste query kan je dan verder ook met een outer join koppelen aan je totalen query UIT. Om het getal nul te krijgen waar een lege waarde staat kan je de functie NZ gebruiken.
 
Nou,

Het was even puzzelen voor me, maar met jullie tips ben ik eruit gekomen met onderstaande query.

Code:
SELECT [Totaal inkoop].Artikelnummer, [Totaal inkoop].[Aantal ingekocht] AS [Totaal ingekocht], 
Nz([Totaal verkoop].[Aantal verkocht],0) AS [Totaal verkocht],
([Totaal inkoop].[Aantal ingekocht]  - Nz([Totaal verkoop].[Aantal verkocht],0)) AS Voorraad
FROM [Totaal inkoop] LEFT JOIN [Totaal verkoop] ON [Totaal inkoop].[Artikelnummer] = [Totaal verkoop].[Artikelnummer];

Nog bedankt voor de tips!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan