Hallo Leute, ich hab folgendes Problem.
Ich erstelle gerade eine Datenbank für eine Vertriebstochter. Hierfür möchte bzw. muss einen Verfügbarkeitscheck durchführen, der den verfügbaren Bestand von bestimmten Artikel mit den des Auftragseingangs abgleicht und mir eventuelle Unterdeckungen anzeigt. Folgende Abfragen habe ich bisher:
Artikel offener Bestellungen Kunden
SELECT tbl_order_entry.article, Sum(tbl_order_entry.[quantity]) AS Summevonquantity
FROM tbl_order_entry
GROUP BY tbl_order_entry.article;
Lagerbestand
SELECT tbl_inventory.[Materialnumber], tbl_inventory.[Description], tbl_inventory.[Stock_Peaces], tbl_inventory.[Order_income_peaces]
FROM tbl_inventory;
Auftragseingang unserer Kunden
SELECT tbl_order_entry.distributor, tbl_order_entry.User, tbl_order_entry.article, tbl_order_entry.type, tbl_selling_pricelist.price_code, tbl_order_entry.customer_order_number, tbl_order_entry.quantity
FROM tbl_selling_pricelist INNER JOIN tbl_order_entry ON tbl_selling_pricelist.[tbl_selling_pricelist_id] = tbl_order_entry.[selling_price];
Ich weiß, dass man das über eine Union-Abfrage irgendwie zusammenführen könnte, doch leider bekomm ich das nicht hin. Ich bräuchte die Felder Distributor, customer order number, article number, quantity, totalopen order quantity, available quantity.....
Oder hat jemand eine andere Idee, wie ich diese Situation in meiner Datenbank abbilden kann?
Danke schon mal für eure Anregungen und Hilfe!!!
Hallo,
prinzipiell musst du für UNION-Abfragen in jeder Abfrage dieselbe Anzahl Felder mit jeweils identischen Feldtyp und jeweil derselben Position haben. Du müsstest also die kleineren Abfragen passend mit Dummy-Werten auffüllen (Bsp. "A" as mytext).
ABER:
1. werden die einzelnen Abfragen hintereinander aufgelistet (als würdest du die Listen ausdrucken und untereinander kleben)
2. erhälst du eine Liste mit mehreren Zeilen, d.H. deine gewünschten Werte stehen NICHT in EINER Zeile
3. scheitert es hier m.E., weil in einer Abfrage eine Aggregat-Funktion (summe) benutzt wird.
ZitatOder hat jemand eine andere Idee, wie ich diese Situation in meiner Datenbank abbilden kann?
Du meinst sicher, wie du das an der Oberfläche darstellen kannst.
Dazu folgende Idee:
Baue ein Formular, in dem du den Artikel per Kombifeld auswählen kannst mit 3 Unterformularen, die als Datenquelle deine einzelnen Abfragen, ergänzt durch die ausgewählte Artikelnummer, bekommen. Dann hättest du die Daten schon mal visuell und könntest mit den Feldern im Hauptformular auch rechnen oder die Werte im HF anzeigen. Die UFos könntest du dann auch "unsichtbar" machen (auf Minigröße zusammenschieben und hinter einem HF-Feld verstecken). Anleitungen dazu gibt es hier im Forum.
Eine pragmatische Lösung ohne komplexe Unions. Vergesse nicht, die Abfragen so zu gestalten, dass sie jeweils genau 1 Datensatz zurückgeben.
lg
crystal
Nachtrag:
Statt 3 UFos zu benutzen könntest du die Abfragen per VBA auch als RecordSets öffen und so auf die Felder zugreifen, im HF darstellen usw.
ZitatOder hat jemand eine andere Idee, wie ich diese Situation in meiner Datenbank abbilden kann?
Statt irgendwelche Abfragen abzubilden sollte vorher über ein Beziehungsbild Einblick in Tabellen und deren Abhängigkeiten gezeigt werden. Wenn dann unmittelbar über UNION-Abfragen nachgedacht wird, ist vermutlich schon ein Fehler im Datenmodell entstanden.
Mit einem bekannten und stimmigen Datenmodell kann man dann sicher entsprechend der formulierten Aufgabe eine Abfrage erstellen.
ZitatKombinieren mehrerer Abfragen
Persönlich bevorzuge ich es, die Ergebnisabfrage auf Basis der Tabellen zu erstellen und daher auch die Möglichkeit zu nutzen, über andere Abfragekonstellationen als "vorgegeben" einfacher und schneller zum Ergebnis zu kommen und dabei auch etwas für die Abfragegeschwindigkeit an sich zu tun.
Hallo,
prinzipiell gebe ich Eberhard Recht. Es stellt sich hier m.E. die Frage, wann und wie die gewünschte Aussage ermittelt werden soll.
Wenn die Prüfung beim Anlegen eines Auftrags erfolgen soll, ist meine Lösung wohl legitim.
Wenn die Prüfung zu beliebiger Zeit erfolgen und quasi als ToDo-Liste (was muss nachbestellt werden?) ausgegeben werden soll, sollte man Eberhards Rat folgen, um eine passende Abfrage erstellen zu können.
Es handelt sich ja nur um drei Tabellen. Zunächst könnte man die sich auf die Auftragstabelle beziehenden Abfragen wohl zu einer kombinieren mit Joins zu tbl_selling_pricelist und tbl_inventory.
Das wäre ja dann auch schon die Lösung für die Liste, wie mir gerade aufgeht...
Etwa so:
select a.artikelnr, summe(a.bestellmenge) as ordersumme, a.distributor, <weitere felder aus preisliste>, i.bestand
from auftrag as a, preisliste as p, inventar as i
inner join a.artikelnr on p.artikelref
inner join a.artikelnr on i.artikelref
order by a.artikelnr
group by a.distributor
Bitte probier's mal mit einer solchen Abfrage.
lg
crystal