Hallo allerseits,
ich heisse Manuel und bin neu hier im Forum und auch noch relativ neu, was Access betrifft.
Aber ich brauche für folgenden Sachverhalt Hilfe :
Ich arbeite in einem Großhandel für Medizintechnik. Wir würden gerne Einkaufspreise von versch. Lieferanten miteinander vergleichen.
Ich bin auf der Suche nach einer vernünftigen Access ( 2016 ) Abfrage, die mir von gleichen Artikeln, den es bei untershiedlichen Lieferanten gibt, den niedrigsten EK ausspuckt.
Was ich bis jetzt gemacht habe in Access :
Tabelle 1
Artikelstamm-DB ( Tabelle mit unseren im Warenwirtschaftssystem angelegten Artikeln ) Das Feld PZN (Pharmazentralnummer ) soll die Konstante werden und ist auch Primärschlüssel
Tabelle 2
tbl_Lieferanten ( alle bei uns hinterlegten Lieferanten mit Lieferantennummer ) Lieferantennummer ist Primärschlüssel
Tabelle 3
tbl_Vergleich ( Artikel mit PZN, sowie Lieferantennummern und EK-Preis )
Hier stehen z.B 3x die gleiche PZN, bei 3 Lieferanten, zu 3 versch. Preisen
Beziehungen:
Artikelstamm_DB zu tbl_Vergleich über PZN
tbl_Lieferant zu tbl_Vergleich über Lieferantennummer
In der Abfrage habe ich nun die Felder EK, PZN und Lieferantennummer.
Ich schaffe es nur nicht, dass mir jeweils der günstigste EK ausgegeben wird.
Ich hoffe, ich konnte es halbwegs verständlich ausdrücken und hoffe auch diverse Tipps und Tricks.
Vielen Dank
Gruß
Hallo Manuel,
Schön, dass dein Datenmodell schon mal korrekt ist. Damit ist es ganz
leicht den niedrigsten EK mit einer gruppierten Abfrage zu ermitteln.
Erstelle eine Abfrage mit der Tabelle tbl_Vergleich, in der Entwurfsansicht
klickst du oben rechts auf das Summenzeichen. Dann schaust du dir im unteren
Bereich die Zeile "Funktion" an.
1.Tipp: gruppiert wird nach dem Feld "PZN"
gruss ekkehard
Hallo Beaker,
vielen Dank für die schnelle Hilfe :
Habe jetzt eine qry mit tbl_Vergleich und den 3 Feldern PZN, EK, Lieferantennummer.
Summe und PZN gruppiert, die anderen beiden erster Wert.
( Habe noch Testdaten in der tbl_Vergleich )
Habe einen Artikel 3 Lieferanten, mit 3 verschiedenen EK's und in der query steht der teuerste Preis der drei. :)
Gruß
Hallo Manuel,
Hast du die verschiedenen Möglichkeiten in der Zeile "Funktion" angeschaut?
Die sind doch eigentlich selbst erklärend bei deiner Fragestellung.
Na gut; - PZN wird gruppiert, EK auf "Minimum" und der Lieferant als "ErsterWert".
gruss ekkehard
Guten morgen,
ja natürlich, EK auf min funktioniert. Die PZN zieht er auch die richtige und es sieht so aus, als stünde in der Abfrage auch
nur ein Datensatz mit der eindeutigen PZN.
Jetzt hab ich noch das Problem, dass er nicht die richtige Lieferantennummer mitnimmt.
Hab ich da noch was übersehen, oder wird das jetzt etwas schwieriger mit einer reinen Abfrage?
Danke
Gruß
Ermittle in der Abfrage zu jeder PZN zunächst nur den niedrigsten Preis. In Schritt 2 erstellst Du eine neue Abfrage, nimmst Ursprungstabelle und die Abfrage aus Schritt 1 in die Abfrage auf, verknüpfst Tabelle und Abfrage über PZN und das Preisfeld und zeigst die gewünschten Felder aus der Tabelle an.
PS: wenn das zu Erfolg führt, kann man den SQL-Text aus Abfrage 1 in Abfrage 2 integrieren und Abfrage 1 anschließend löschen (das Wie zeigen wir Dir dann).
Hallo Lachtaube,
es hat genau so funktioniert.
Habe jetzt in der 2. Abfrage die pzn, den niedrigsten EK und den passenden Lieferanten. Somit stimmt meine Basis.
( Wird später mit echten Daten als .csv exportiert und über ein makro in mein WWS importiert. Im wws soll dann beim entsprechenden Artikel der EK und der Lieferant auf den günstigsten geändert werden )
Allgemeine Access Verständnisfrage :
Was wäre jetzt anders, wenn ich nur diese eine Tabelle gemacht hätte? ( tbl_Vergleich)
Vielen Dank
Zur Verständnisfrage: Es läge ein Haufen redundanter Daten vor. Denn alle Lieferantendaten müssten ja in jedem Datensatz eines Artikels erscheinen. Gleiches träfe auch für die Artikel zu. Das Datenvolumen wäre entsprechend größer. Ausserdem bestünde die Gefahr, dass Inkonsistenzen (sei er auch nur durch einen Tippfehler verursacht) bei den Daten auftreten.
Guten morgen,
vielen Dank für die Hilfe.
Es hat an sich nur den Eindruck gemacht, als wären diese Tabellen nicht beteiligt :)
Nun, diese beiden Tabellen verknüpft man, wenn das Resultat der Abfrage steht und Klartextausgaben und weitere Einzelheiten bei der Ausgabe (z. Bsp. in einem Bericht, einem CSV- oder Excel-Export) erwünscht sind. Bei einem Equi-Join (https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap7.htm#innerjoin) (Inner Join), das sind die Verknüpfungen, die Access auch im Abfrageeditor mit einer Linie darstellen kann, werden dann nur die Datensätze angezeigt, die auf beiden Seiten sind (so funktioniert das ja auch mit der Abfrage über PKN und Preis).
Zusätzlich könnte man diese Verknüpfung auch in einen Left- (https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap7.htm#leftjoin) oder Right-Outer Join (https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap7.htm#rightjoin) umwandeln, was dann auch die Datensätze der linken oder rechten Seite der Verknüpfung anzeigt, die auf der anderen Seite kein Pendant haben. Diese Verknüpfungsarten wären aber für Deine Anforderung unbrauchbar. Der Vollständigkeit wegen sei noch erwähnt, dass es auch Theta-Joins (https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap7.htm#thetajoin) gibt, die Access nur noch in der SQL-Ansicht bewältigen kann, bzw. beim Umschalten in die Entwurfsansicht der Abfrage ihren Inhalt verfälscht und unbrauchbar macht.
Guten morgen ,
vielen Dank für die ausführliche Antwort. Lerne jeden Tag neues dazu :)
Ich hab jetzt zu meiner Problemstellung noch einen Nachtrag ( eigenen Wunsch )
Meine Abfrage erzielt nun die gewünschten Ergebnisse mit meinen Testdaten. ( ca. 20 Datensätze )
Wenn ich jetzt allerdings Daten meiner Lieferanten in die Tabelle packe, sind da schnell 5000 Zeilen enthalten.
Kann ich nun aus der Abfrage die Artikel (PZN's ) entfernen, die nur einmal vorkommen und dann logischerweise in der Abfrage als günstigster landen?
Danke danke
Lasse Dir vom Abfrage-Assistenten zur Suche nach Doubletten Deine Basis-Abfrage erstellen.
Jetzt bin ich etwas verwirrt, zumal mir nochwas eingefallen ist. Oh mann ...
Bei Artikeln, die ich nur einmal in der tbl_Vergleich habe ( kommt ´dann oft vor, Sortiment der Lieferanten u.s.w ) findet ja kein Preisvergleich statt, sondern er übernimmt in der Abfrage den einen Preis den er hat. ( Das meinte ich, ob ich das ausklammern kann ). Ich will als Ergebnis nur Daten, die dann auch im WWS geändert werden.
Und genau das bringt mich zu einem Problem :
Wo hinterlege ich jetzt sinnvoll die Preise, die schon im WWS drin sind?
Wenn jetzt der günstigste aus der tbl_Vergleich z.b teurer ist, als der Preis, den ich schon im System habe, ergibt das keinen Sinn.
Kann man mein geschriebenes nachvollziehen? :)
Danke
Das könnte ja dann wohl nur über einen weiteren Vergleich ermittelt werden: Abfrage-Preis vs WWS-Preis.
wie wäre das zu implementieren, wenn ich bei der
tbl_Artikelstamm den bestehenden EK als Spalte anfüge?
Danke
Sinngemäß sollteSELECT q.* FROM Abfrage q
LEFT JOIN WWSTabelle w
ON q.PKN = w.PKN
WHERE q.Preis < w.Preis OR
w.Preis Is Null;die Daten aus der Abfrage übrig lassen, für die ein niedrigerer Preis als in der WWS-Tabelle ermittelt wurde, bzw. für die es in der WWS-Tabelle noch keinen Eintrag gibt.
okay, also eine neue Abfrage mit der ek qry und der wws Tabelle?
Geht das mit der sql-Anweisung etwas ausführlicher? :) sorry
Manuel, Du musst schon konkret fragen, was Du an der SQL-Abfrage nicht verstehst oder in einem SQL-Tutorium (AFAIK erklärt die Wikipedia Grundzüge von SQL auch recht gut) im WWW nachforschen (der Sprachumfang ist ja nicht so gewaltig).
Guten morgen,
die SQL Anweisung kann ich lesen. Es ging mir bei der Frage nur um die Anordung ( Reihenfolge ) in meiner Datenbank.
Ich benötige dafür nun eine weitere Abfrage mit der tbl_Artikelstamm ( WWS ) und der letzten qry, die mir die günstigsten Preise incl. Lieferant ausspuckt, oder die tbl_Verlgleich, die alle EK's enthält, die ich von den Lieferanten habe?
Danke
Das Abfrageergebnis ist mit dem Artikelstamm abzugleichen, wobei auch noch ggf. Fälle von Preisänderungen untersucht werden müssten. Was nützt es, wenn in Artikelstamm zwar der günstigere Preis steht, beim eingetragenen Lieferanten aber mittlerweile ein anderer Preise gültig ist.
Hallo miteinander,
wünsche noch ein frohes und gesundes neues Jahr 2018!
Meine Access Abfrage funktioniert tadellos, dank eurer hilfe.
Jetzt habe ich noch etwas, was mir besser gefallen würde. :) wegen der Übersichtlichkeit
Wenn jetzt in der Vergleichstabelle Artikel eingespielt werden, die ich nicht im Artikelstamm habe ( WAWI ), zeigt sie mir die Access Abfrage natürlich an ''als günstigster''.. wie kann ich das noch ausblenden?
vielen vielen Dank
Ein INNER JOIN bewirkt, dass die Daten auf beiden Seiten der Verknüpfung vorhanden sein müssen. Also einfach nur die Zieltabelle zusätzlich in der Abfrage über das Schlüsselfeld verknüpfen (Linie aufziehen), sollte zur gewünschten Reduktion der Daten führen.
Hallo Lachtaube,
sieht gut aus, nachdem ich die Abfragen nach und nach gestaltet habe, kam der innerjoin die pzn betreffend vorher mit dazu
und zum Schluß der leftjoin für den EK.
Super, vielen Dank!