SQL Abfrage: min über zwei Tabellen (Artikelinformationen und Staffelpreise)

sebdatenfrager

Neuer Benutzer
Beiträge
2
Hallo zusammen,

ich habe eine Frage zu einer formlierenden SQL Abfrage.

In einer Tabelle habe ich Informationen zum Artikel:

Artikelnr | LiefNr | Mindestmenge in kg | Notiz
------------------------------------------------
A1 | 22 | 15 | von Produktion bevorzugt
A1 | 30 | 20 | Alternativlieferant
B0 | 30 | 30 | Materialalternative


In einer weiteren Tabelle habe ich die zugehörigen Staffelpreise des Artikels und Lieferanten:


Artikelnr | LiefNr | Staffel | Menge in kg |Preis in €
------------------------------------------------
A1 | 22 | 1 | 10 | 5,00
A1 | 22 | 2 | 20 | 4,50
A1 | 22 | 3 | 40 | 4,00

A1 | 30 | 1 | 35 | 4,40
A1 | 30 | 2 | 50 | 3,80

B0 | 30 | 1 | 15 | 6,00
B0 | 30 | 2 | 30 | 5,50
B0 | 30 | 3 | 50 | 5,00



Ich möchte eine Abfrage machen welche beide Tabellen verknüpft und den geringsten Preis der Staffel anzeigt:

Artikelnr | LiefNr | Mindestmenge | Notiz | Staffel | Menge | Preis
--------------------------------------------------------------------
A1 | 22 | 15 | von...| 3 | 40 | 4,00
A1 | 30 | 20 | Altern| 2 | 50 | 3,80
B0 | 30 | 30 | Materi| 3 | 50 | 5,00

Als Ergänzung zur vorherigen Frage: Wie lautet der SQL Befehl mit Einschränkung der LiefNr (z.B. nur 22)

Vielen Dank für eure Unterstützung






 
Werbung:
Du suchst also zuerst in Deiner Preistabelle je Artikel den geringsten Preis. Diese Ergebnissmenge joinst Du dann zu der ersten Tabelle.

Was hast denn bisher versucht?
 
Meine bisherige Abfrage, die nicht zum Ziel führte:

ich nenne die Tabelle, welche Daten zum Artikel enthält "Artikel" und die andere mit Informationen zum Preis "Artikel_Preis"

SELECT Artikel.Artikelnr, Artikel.LiefNr, Artikel.Mindestmenge in kg, Artikel.Notiz, Artikel_Preis.Staffel, Artikel_Preis.Menge, Artikel_Preis.Preis
FROM Artikel
INNER JOIN Artikel_Preis ON Artikel.Artikelnr = Artikel_Preis.Artikelnr
WHERE Artikel_Preis.Preis
(
SELECT Min(Preis) FROM Artikel_Preis)
)


führte nicht zum gewünschten Ergebnis, ich erkenne den Fehler aber nicht.


Die Abfrage mit min unter SELECT bedingt eine Gruppierung welche alle Preise und Staffeln anzeigt

SELECT Artikel.Artikelnr, Artikel.LiefNr, Artikel.Mindestmenge in kg, Artikel.Notiz, Artikel_Preis.Staffel, Artikel_Preis.Menge, min(Artikel_Preis.Preis)
FROM Artikel
INNER JOIN Artikel_Preis ON Artikel.Artikelnr = Artikel_Preis.Artikelnr
GROUP BY Artikel.Artikelnr, Artikel.LiefNr, Artikel.Mindestmenge in kg, Artikel.Notiz, Artikel_Preis.Staffel, Artikel_Preis.Menge
 
Werbung:
Code:
test=*# select * from artikel;
 nr | lief | mindest |   notiz   
----+------+---------+------------
 a1 |   22 |      15 | von prod
 a1 |   30 |      20 | alternativ
 b0 |   30 |      30 | material
(3 rows)

test=*# select * from artikel_preis ;
 nr | lief | staffel | menge | preis
----+------+---------+-------+-------
 a1 |   22 |       1 |    10 |    50
 a1 |   22 |       2 |    20 |    45
 a1 |   22 |       3 |    40 |    40
 a1 |   30 |       1 |    35 |    44
 a1 |   30 |       2 |    50 |    38
 b0 |   30 |       1 |    15 |    60
 b0 |   30 |       2 |    30 |    55
 b0 |   30 |       3 |    50 |    50
(8 rows)

test=*# select a.nr, a.lief, a.mindest, a.notiz, ap.staffel, ap.menge, ap.preis from artikel a inner join ( select distinct on (nr, lief) nr, lief, staffel, menge, preis from artikel_preis order by nr, lief, preis asc) ap on (a.nr, a.lief)=(ap.nr, ap.lief);
 nr | lief | mindest |   notiz    | staffel | menge | preis
----+------+---------+------------+---------+-------+-------
 a1 |   22 |      15 | von prod   |       3 |    40 |    40
 a1 |   30 |      20 | alternativ |       2 |    50 |    38
 b0 |   30 |      30 | material   |       3 |    50 |    50
(3 rows)

test=*#

Achtung, ist mit PostgreSQL gemacht, das DISTINCT ON kann M$SQL evtl. nicht. In dem Fall z.B. mit Window-Funktion arbeiten.
 
Zurück
Oben