Outer Join Query??

Status
Niet open voor verdere reacties.

lam201

Gebruiker
Lid geworden
23 aug 2007
Berichten
556
Goedendag,

Wie kan mij helpen met deze query?
Ik heb twee tabellen.

T1:
Afdeling | ArtikelNR | Voorraad | Verkopen

T2:
Afdeling | ArtikelNR | Inkopen

Nu wil ik een queary die voor afdeling 10 een overzicht met voorraad, verkopen en inkopen per artikel.
Dat gaat goed zolang elk artikel dat besteld is (=T2.inkopen) ook voorkomt in T1.
Maar als een artikel wordt ingekocht dat nog niet op voorraad of verkocht is, dan krijg ik deze niet in mijn uitkomst.

Ik heb deze query met outer join al geprobeerd, maar dat werkt niet.
PHP:
SELECT T1.afdeling, T1.ArtikelNr, T1.Voorraad, T1.Verkopen, T2.Inkopen
FROM T1 full outer join T2 ON T1.Afdeling = T2.afdeling and T1.ArtikelNr = T2.artikelNr
WHERE T1.afdeling = 10


Zie bijgevoegd Excel document voor meer details.


Wie kan me helpen?
 

Bijlagen

als leek in acces
kan je niet T2.ArtikelNr=T1.artikelnr doen? of geeft dit een ander probleem
 
Dit is (in mijn ogen) wel een beetje vreemd verhaal. Om te beginnen lijkt met dat: Voorraad = Inkopen - Verkopen. Voorraad is dan dus een redundant gegeven, tenzij je ook nog iets als "Ontvangsten" hebt, maar dat blijkt nergens uit. Waarom je twee tabellen hebt en voorraad koppelt aan verkopen is ook raadselachtig. De sleutel (afdeling/artikel) is gelijk dus waarom niet in één tabel?
Alle aantallen (inkopen, verkopen, voorraad) lijken me totalen. Die leg je normaliter niet vast. In beginsel hoef je alleen mutaties vast te leggen om de totalen te kunnen berekenen.

Om dan toch maar je vraag te beantwoorden: ervan uitgaande dat er geen voorraden/verkopen kunnen zijn zonder inkopen, wordt de query
Code:
SELECT T2.Afdeling, T2.ArtikelNr, T1.Voorraad, T1.Verkopen, T2.Inkopen
FROM T1 RIGHT JOIN T2 ON (T1.ArtikelNr = T2.ArtikelNr) AND (T1.Afdeling = T2.Afdeling)
WHERE T2.Afdeling=10;

Enne, als je een vraag over Access stelt, voeg dan ook een Access-voorbeeld toe.
 
Laatst bewerkt:
oke, even ter verduidelijking.
In mijn versimpelde voorbeeld spreek ik over inkopen.
Dat is misschien niet helemaal juist. Het betreft geplaatste orders, die nog niet geleverd zijn.
De rekensom begin voorraad + inkopen - verkopen = eindvoorraad gaat hier dus niet op.
verkopen betreft de verkoop van gisteren, voorraad de voorraad gisteren einde dag. En inkopen is dan de geplaatste inkooporders, die ergens in de toekomst geleverd worden.
(orders was een betere naam geweest)

met de code uit #2 kom ik er helaas niet.
Ik krijg slechts 2 regels.
de artikelen die alleen in T1 staan, komen niet in de output.
 
Ik had de vraag denk ik niet goed gelezen. Probeer deze eens:
Code:
SELECT T2.Afdeling, T2.ArtikelNr, T1.Voorraad, T1.Verkopen, T2.Inkopen
FROM T1 RIGHT JOIN T2 ON (T1.Afdeling = T2.Afdeling) AND (T1.ArtikelNr = T2.ArtikelNr)
WHERE T2.Afdeling=10
UNION
SELECT T1.Afdeling, T1.ArtikelNr, T1.Voorraad, T1.Verkopen, T2.Inkopen
FROM T1 LEFT JOIN T2 ON (T1.ArtikelNr = T2.ArtikelNr) AND (T1.Afdeling = T2.Afdeling)
WHERE T1.Afdeling=10 AND T2.Inkopen Is Null;
Access kent geen FULL OUTER JOIN, dus moet je die simuleren.
 
Doe dan de nullen er ook bij :)
Code:
SELECT T2.Afdeling, T2.ArtikelNr, Nz([Voorraad],0) AS Voorraad_, Nz([Verkopen],0) AS Verkopen_, Nz([Inkopen],0) AS Inkopen_
FROM T1 RIGHT JOIN T2 ON (T1.Afdeling = T2.Afdeling) AND (T1.ArtikelNr = T2.ArtikelNr)
WHERE (((T2.Afdeling)=10))UNION
SELECT T1.Afdeling, T1.ArtikelNr, Nz([Voorraad],0) AS Voorraad_, Nz([Verkopen],0) AS Verkopen_, Nz([Inkopen],0) AS Inkopen_
FROM T1 LEFT JOIN T2 ON (T1.ArtikelNr = T2.ArtikelNr) AND (T1.Afdeling = T2.Afdeling)
WHERE T1.Afdeling=10 AND T2.Inkopen Is Null;
 
Tabel 1 is dus je stocktabel, normaal heb je een tabel met artikelenbestand, een tabel met klanten, een tabel met verkopen, een tabel met verkooplijnen, een tabel met aankopen ,een tabel met aankooplijnen en een stocktabel. De stocktabel wordt telkens bijgewerkt na een verkoop of aankoop. Vergeet voorraad = aankoop - verkoop, in meer dan 20-jaar in de logistiek heb ik dat nog nooit correct weten werken. Elke logistiek ingenieur kan je dit uitleggen. Met de gegeven structuur wordt je query wel eenvoudiger.
 
Bedankt voor de hulp.
Het is gelukt met bovenstaande queries.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan