Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kombinieren mehrerer Abfragen

Begonnen von lutschi83, November 17, 2016, 09:49:36

⏪ vorheriges - nächstes ⏩

lutschi83

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!!!

crystal

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
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

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.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

crystal

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
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...