Union Query Uitfilteren

Status
Niet open voor verdere reacties.

maurann

Gebruiker
Lid geworden
22 jul 2007
Berichten
117
Beste Helpmij.Forumleden,
Heb een UnionQuery waarin gegevens uit een tabel product (productId en productvoorraad) worden samengevoegd met gegevens uit een query waarin de voorraad wordt verrekend (verkochte producten worden van voorraad afgetrokken, producten die aangekocht worden worden bij voorraad opgeteld).
Nu wil ik dat van de unionquery enkel de producten worden weergegeven uit de tabel product waar geen voorraadwijzigingen zijn gebeurd, én de producten van de query waar voorraadwijzigingen zijn gebeurd. Nu geeft de unionquery alle producten weer samen met alle producten waar voorraadwijziginen zijn gebeurd ( dus nu worden producten waarmee voorraadwijzigingen plaatsvonden 2 x opgehaald: 1 maal uit tabel product en 1 x uit de query die de voorraad herberekend).
Unionquery : SELECT qrestock.ProductId, qrestock.Tot
FROM qrestock
UNION Select qreProduct.ProductId,Voorradig
From qreProduct;
QreStock: SELECT Product.ProductId, Product.Scannummer, Product.CategorieId, Product.Productomschrijving, Product.CategorieId, Product.LeverancierId, Product.Verkoopprijs, Product.Inkoopprijs, [somvanaantal]-[somvanMutaantalin] AS Tot, Sum(Orderdetail2.MutAantalIn) AS SomVanMutAantalIn, Sum(Orderdetail2.Aantal) AS SomVanAantal
FROM Product INNER JOIN (Orders INNER JOIN Orderdetail2 ON Orders.Orderid = Orderdetail2.OrderId) ON Product.ProductId = Orderdetail2.ProductId
GROUP BY Product.ProductId, Product.Scannummer, Product.CategorieId, Product.Productomschrijving, Product.CategorieId, Product.LeverancierId, Product.Verkoopprijs, Product.Inkoopprijs;
QreProduct:SELECT Product.ProductId, Product.Voorradig
FROM Product;
Hoop dat dit duidelijk is,
Misschien is dit niet via een unionquery op te lossen maar wel in vba,
Benieuwd.
M.
 
Beste Maurann,

Het is makkelijker als u een voorbeeld database bijvoegt. Het is volgens mij eenvoudig op te lossen met een query. Ik durf dat echter niet te gokken. Vandaar die sample database/

Guus
 
In bijlage een voorbeelddebeetje.
Bedoeling is dat er een stock kan worden afgeleid uit de unionquery.
Maar om dat te bereiken zouden de records die in zowel in qrestock als in qreproduct voorkomen, niet mogen getoond worden. In de unionquery mogen enkel de records uit qrestock staan (en die komen altijd voor in qreproduct), samen met de records die enkel in qreproduct staan.
Is het ook mogelijk om in te stellen dat de records na een bepaalde datum uit qrestock getoond worden (in de unionquery)
Grtz,

M.

PS. Paste database wat aan, en uploade het opnieuw in zelfde bericht.(sorry hoor)
 

Bijlagen

  • hm.zip
    hm.zip
    13,6 KB · Weergaven: 301
Laatst bewerkt:
Wat wil je precies? De union query is een resultaat van een aantal velden en tabellen. Móet je die als uitgangs punt gebruiken of mag je uitgaan van de tabellen?
Die union query is een middel en niet het doel volgens mij. Wat is je doel?
 
Doel is met de actuele voorraad te kunnen werken. Daarvoor is er de
qreproduct, die de voorraad omschrijft per product uit de tabel product.
Deze voorraad is een 'statische kijk' op de tabel product. Deze tabel wordt
aangevuld met nieuwe producten en hun aantal, maar er wordt geen rekening gehouden met producten die verkocht worden of
in voorraad komen.
Daarvoor dient de tabel orderdetail.
Er vinden orders plaats waardoor een product de voorraad verlaat wat wordt bijgehouden in de tabel orderdetail (aantal per productid voor producten die de voorraad verlaten, en mutaantalin per product voor producten die in voorraad komen). Dit wordt verrekend door de qrestock.
Om een actueel beeld te hebben op de voorraad is er de unionquery. Die
voegt de records uit qrestock en qreproduct samen.
En dit zou niet mogen, hij zou enkel de records uit qreproduct mogen tellen die niet in qrestock voorkomen, anders worden die dubbel geteld.
Dus de unionquery zou moeten tellen:
records uit qrestock
records uit qreproduct die niet voorkomen in qrestock (want deze producten zijn in voorraad zonder aangevuld of verkocht te zijn).

Om er goed mee tekunnen werken zou het wenselijk zijn dat de qrestock
de mogelijkheid heeft te beginnen tellen na een bepaalde datum (dus in tabel orderdetail de records eruit haalt na een bepaalde datum.
Dit om volgende reden:
stel je doet een stocktelling, dan is tabel product up to date, nadien gebeuren orders (producten gaan in en uit, wat wordt bijgehouden in tabel orderdetail), na de stocktelling kun je de voorraad telkens
tellen (qrestock zou dan rekening moeten houden met de orders na de stocktelling).


Hopelijk is het duidelijk wat ik wil. De weg die ik bewandel is via een union query, maar dit moet het uitgangspunt niet zijn, als het kan
via andere wegen, laat het dan maar weten.
Zolang het doel kan bereikt worden, en dit is een voorraadtelling op elk moment.


M.
 
Laatst bewerkt:
Ik heb twee queries gemaakt. 1 om de orderdetails tabel te groeperen en te sommeren per product id en een tweede query die de voorraad van het product verminderd met het gesommeerde aantal uit voorgaande query.

Doe er je voordeel mee.

HTH:D
 

Bijlagen

Bedankt Guus,
't lukt.
Bijkomend vraagje:
bestaat er een mogelijkheid om de qryProductsSold de records te laten ophalen vanaf een bepaalde datum - bijvoorbeeld vanaf 14/3 in voorbeelddb.
Dit omdat het veld voorradig in de tabel product soms geupdate wordt (na een telling bijvoorbeeld) en de orders dan vanaf de update moeten bekeken worden door qryProductsSold.

M.
 
Ja, die mogelijkheid bestaat. Maar je wilt vast weten hoe?

Als je qryProductsSold als volgt aanpast, dan oet je eerst een datum opgeven
Code:
SELECT Orderdetail.ProductId, Sum(Orderdetail.Aantal) AS SumOfAantal, Orders.Orderdatum
FROM Orders INNER JOIN Orderdetail ON Orders.Orderid = Orderdetail.OrderId
GROUP BY Orderdetail.ProductId, Orders.Orderdatum
HAVING (((Orders.Orderdatum)>=[ParameterDatum (dd-mm-jjjj)]));
HTH:D
 
Right Guus,

Maar 't probleem stelt zich dan dat de query de records ophaalt per orderdetail en niet gegroupeerd per productid.

M.
 
Vraagje voor Guus2005

Bedankt Guus,
't Lukte me met jouw steun .
Bijkomend vraagje:
Kan je indien in de parameterquery geen datum wordt ingevuld verwezenlijken dat alle records dan worden getoond?

Grtz,

M.
 
Natuurlijk,
In het geval dat er niets wordt ingevuld dan is de waarde Null. Daar moet je dan op testen

Code:
HAVING (((Orders.Orderdatum)>=[ParameterDatum (dd-mm-jjjj)]));

wordt dan

Code:
HAVING (((Orders.Orderdatum)>=
iif(len(nz([ParameterDatum (dd-mm-jjjj)];""))=0;[Orders].[Orderdatum];[ParameterDatum (dd-mm-jjjj)]))

give or take a few parenthesis.

Enjoy!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan