Supportnet / Forum / Datenbanken
Daten vergleichen
Frage
Hallo,(auch an Rudolf)
ich habe ein für mich großes Problem.
Ich habe eine Tabelle (Beispiel)
Obst - Preis Müller - Preis Schulz
---------------------------------------
Äpfel - 10 EURO - 20 EURO
Birnen - 20 EURO - 10 EURO
so und jetzt möchte ich eine Abfrage stellen die mir den niedrigsten Wert von Äpfel und Birnen und den dazugehörigen Anbieter ausdruckt. Geht das ? Hat einer eine Idee wie man das machen kann. Ich hänge total fest habe nicht einmal einen Ansatz wie man das machen könnte. Es wäre super wenn mir einer helfen könnte. Danke schon mal.
Gruß
Margret
Antwort 1 von Roadrunner90
Hallo Margret,
geht auf jeden Fall. Bin grade schwer beschäftigt. Werde am späten Nachmittag nochmal reinschauen und wenn bis dahin keiner eine Lösung hat mich drum kümmern.
Gruß Rudolf
geht auf jeden Fall. Bin grade schwer beschäftigt. Werde am späten Nachmittag nochmal reinschauen und wenn bis dahin keiner eine Lösung hat mich drum kümmern.
Gruß Rudolf
Antwort 2 von Teddy7
Wieviele Preisspalten vergleichst Du denn da ?
Bei 2 Spalten ist die Lösung eine andere als bei 50.
Bei wenigen Spalten würde es z.B. ausreichen eine Abfrage zu machen mit
Obst / Max von Preis Müller / Max von Preis Schulz
und eine eigene Spalte einfügen mit:
wenn([Max von Preis Müller] > [Max von Preis Schulz];[Max von Preis Müller];[Max von Preis Schulz])
Gruß
Klaus
Bei 2 Spalten ist die Lösung eine andere als bei 50.
Bei wenigen Spalten würde es z.B. ausreichen eine Abfrage zu machen mit
Obst / Max von Preis Müller / Max von Preis Schulz
und eine eigene Spalte einfügen mit:
wenn([Max von Preis Müller] > [Max von Preis Schulz];[Max von Preis Müller];[Max von Preis Schulz])
Gruß
Klaus
Antwort 3 von oliverV
Hallo Margret,
falsche Datenbankstruktur !!!
dennoch habe bin ich über mehrere Umwege zum gewünschten Ergebnis gekommen.
Ich bin davon ausgegangen, das deine Werte in einer Tabelle stehen.
1) Erstelle eine SQL-UNION-Abfrage „UNION“
SELECT Tabelle1.Obst, Tabelle1.[Preis Müller] As Preis, "Müller" As Anbieter FROM Tabelle1
UNION SELECT Tabelle1.Obst, Tabelle1.[Preis Schulz], "Schulz" As Anbieter FROM Tabelle1;
2) Erstelle eine Auswahlabfrage „Min“
SELECT UNION.Obst, Min(UNION.Preis) AS [Min von Preis]
FROM [UNION]
GROUP BY UNION.Obst;
3) Erstelle eine Auswahlabfrage “Min mit Preis”
SELECT UNION.Obst, UNION.Preis, UNION.Anbieter, Min.[Min von Preis], IIf([Min von Preis]=[Preis],[Anbieter],"") AS [niedrigster Anbieter]
FROM [Min] INNER JOIN [UNION] ON Min.Obst = UNION.Obst;
4) Erstelle eine Abfrage „Ergebnis“
SELECT [Min mit Preis].Obst, [Min mit Preis].[Min von Preis], [Min mit Preis].[niedrigster Anbieter]
FROM [Min mit Preis]
WHERE ((([Min mit Preis].[niedrigster Anbieter]) Not Like ""));
Das Ganze ist jetzt mit der rechten Hand hinter dem Kopf herum am linken Ohr gekratzt, evtl. gibt es noch eine elegantere Lösung.
Gruß
oliver
falsche Datenbankstruktur !!!
dennoch habe bin ich über mehrere Umwege zum gewünschten Ergebnis gekommen.
Ich bin davon ausgegangen, das deine Werte in einer Tabelle stehen.
1) Erstelle eine SQL-UNION-Abfrage „UNION“
SELECT Tabelle1.Obst, Tabelle1.[Preis Müller] As Preis, "Müller" As Anbieter FROM Tabelle1
UNION SELECT Tabelle1.Obst, Tabelle1.[Preis Schulz], "Schulz" As Anbieter FROM Tabelle1;
2) Erstelle eine Auswahlabfrage „Min“
SELECT UNION.Obst, Min(UNION.Preis) AS [Min von Preis]
FROM [UNION]
GROUP BY UNION.Obst;
3) Erstelle eine Auswahlabfrage “Min mit Preis”
SELECT UNION.Obst, UNION.Preis, UNION.Anbieter, Min.[Min von Preis], IIf([Min von Preis]=[Preis],[Anbieter],"") AS [niedrigster Anbieter]
FROM [Min] INNER JOIN [UNION] ON Min.Obst = UNION.Obst;
4) Erstelle eine Abfrage „Ergebnis“
SELECT [Min mit Preis].Obst, [Min mit Preis].[Min von Preis], [Min mit Preis].[niedrigster Anbieter]
FROM [Min mit Preis]
WHERE ((([Min mit Preis].[niedrigster Anbieter]) Not Like ""));
Das Ganze ist jetzt mit der rechten Hand hinter dem Kopf herum am linken Ohr gekratzt, evtl. gibt es noch eine elegantere Lösung.
Gruß
oliver
Antwort 4 von oliverV
Hallo Klaus,
mit deiner Variante funktioniert es auch, es fehlt allerdings der Anbietername, diesen bekommt man aber durch eine weiter Spalte „Anbietername“:
wenn([Max von Preis Müller]>[Max von Preis Schulz]; „Müller“; „Schulz“)
Dein Beispiel ist mit max. meins mit min. ; ändert jedoch nichts an der Vorgehensweise.
Gruß
oliver
mit deiner Variante funktioniert es auch, es fehlt allerdings der Anbietername, diesen bekommt man aber durch eine weiter Spalte „Anbietername“:
wenn([Max von Preis Müller]>[Max von Preis Schulz]; „Müller“; „Schulz“)
Dein Beispiel ist mit max. meins mit min. ; ändert jedoch nichts an der Vorgehensweise.
Gruß
oliver
Antwort 5 von Teddy7
Jo - lesen ist halt manchmal Glückssache *g*
Antwort 6 von Roadrunner90
@Margret
bist du mit den tipps klargekommen, falls nein, bin ich ab jetzt wieder erreichbar
Gruß Rudolf
bist du mit den tipps klargekommen, falls nein, bin ich ab jetzt wieder erreichbar
Gruß Rudolf
Antwort 7 von Roadrunner90
Hallo Margret,
erstmal muss ich Oliver recht geben, die Struktur der Tabelle ist nicht gut.
Besser z.b. so:
Fld1 = Obstart
Fld2 = Anbieter
Fld3 = Preis
sieht dann gefüllt etwa so aus:
Äpfel - Müller - 10 €
Äpfel - Huber - 15 €
Birnen - Müller - 20 €
Birnen - Huber - 12€
danach funktioniert eine Abfrage die als SQL etwa so aussieht:
die Abrage obstart=... kannst du durch eine Variable aus z.B. einem Formular ersetzen. Das sieht dann etwa so aus:
"obstart = & Formular!Obstauswahl"
Wie schon gesagt 35° Innenraumtemperatur, da geht das alles nicht so flüssig. Wenn weiterhin Unklarheit besteht, dann schick mir deine email-adresse und ich lass dir eine kleine Muster-DB zukommen.
Gruß Rudolf
erstmal muss ich Oliver recht geben, die Struktur der Tabelle ist nicht gut.
Besser z.b. so:
Fld1 = Obstart
Fld2 = Anbieter
Fld3 = Preis
sieht dann gefüllt etwa so aus:
Äpfel - Müller - 10 €
Äpfel - Huber - 15 €
Birnen - Müller - 20 €
Birnen - Huber - 12€
danach funktioniert eine Abfrage die als SQL etwa so aussieht:
SELECT testobst.*
FROM testobst
WHERE (((testobst.preis)=DMin("preis","testobst","obstart='Birnen'")));
die Abrage obstart=... kannst du durch eine Variable aus z.B. einem Formular ersetzen. Das sieht dann etwa so aus:
"obstart = & Formular!Obstauswahl"
Wie schon gesagt 35° Innenraumtemperatur, da geht das alles nicht so flüssig. Wenn weiterhin Unklarheit besteht, dann schick mir deine email-adresse und ich lass dir eine kleine Muster-DB zukommen.
Gruß Rudolf

